組件發(fā)布到Maven中央倉(cāng)庫(kù)過程

概述

??最近發(fā)布了自己的項(xiàng)目到maven中央倉(cāng)庫(kù)棍厂、通過文章記錄一下颗味,第一方便自己,第二幫助他人牺弹,我想看這篇文章的同學(xué)肯定一定用過maven來(lái)構(gòu)建項(xiàng)目浦马,并且可能用過maven私服,上傳maven中央倉(cāng)庫(kù)的起因是因?yàn)樽约壕帉懥艘粋€(gè)腳手架张漂,涉及到一部分和業(yè)務(wù)無(wú)關(guān)代碼晶默,想著是做個(gè)模塊放到項(xiàng)目里好還是獨(dú)立出來(lái)玩好呢,后來(lái)一想航攒,為了讓大家專注業(yè)務(wù)磺陡,還是分離出來(lái),并打包上傳到maven中央倉(cāng)庫(kù)吧。在剛學(xué)習(xí)maven的時(shí)候知道了倉(cāng)庫(kù)這個(gè)概念币他、本地坞靶、私服、云端圆丹。很久一來(lái)滩愁,都是玩本地躯喇,后來(lái)玩私服辫封,這不也玩起中央倉(cāng)庫(kù)了,那就分享一下經(jīng)驗(yàn)吧廉丽,分享的時(shí)候我盡力做到調(diào)理倦微、清晰、讓大家都看得懂正压,少走彎路欣福。

要求

  • 只能將發(fā)行版上傳到中央存儲(chǔ)庫(kù)
  • 具有java doc和代碼源文件
  • 使用GPG/PGP簽名文件
  • 足夠的源數(shù)據(jù)信息

步驟

準(zhǔn)備pom

坐標(biāo)(GAV)

  • groupId:以反向域名開頭的項(xiàng)目的頂級(jí)名稱空間級(jí)別
  • artifactId:組件的唯一名稱
  • version:組件的版本字符串,版本可以是任意字符串焦履,但不能以結(jié)尾-SNAPSHOT拓劝,因?yàn)檫@是用于標(biāo)識(shí)當(dāng)前正在開發(fā)的版本的保留字符串。強(qiáng)烈建議使用[語(yǔ)義版本控制](http://semver.org)幫助您的用戶選擇版本嘉裤。
<groupId>cn.smallbun.scaffold</groupId>
<artifactId>scaffold-framework</artifactId>
<version>1.0.0</version> 

項(xiàng)目名稱郑临,描述和URL

有關(guān)項(xiàng)目的一些人可讀的信息和指向你的項(xiàng)目的網(wǎng)站獲取更多,我們需要的存在name屑宠,description和url 厢洞。

<name>smallbun-scaffold-framework</name>
<description>smallbun企業(yè)級(jí)開發(fā)腳手架-核心框架</description>
<url>http://www.smallbun.cn</url> 

一種常見且可接受的名稱慣例是使用Maven屬性從坐標(biāo)中將其組裝起來(lái):

<name>${project.groupId}:${project.artifactId}</name>

許可證信息

需要聲明用于分發(fā)組件的許可證

 <!--Apache-->
  <licenses>
    <license>
      <name>The Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>
 <!--OR MIT-->
  <licenses>
      <license>
        <name>MIT License</name>
        <url>http://www.opensource.org/licenses/mit-license.php</url>
      </license>
  </licenses>

開發(fā)者信息

為了能夠關(guān)聯(lián)項(xiàng)目,需要添加一個(gè)開發(fā)人員部分典奉。

<!--開發(fā)人員信息-->
<developers>
    <developer>
        <name>zuoqinggang</name>
        <email>qinggang.zuo@gmail.com</email>
        <url>https://www.pingfangushi.com</url>
    </developer>
</developers>

SCM 信息

與源代碼管理系統(tǒng)的連接是一個(gè)必需的元素躺翻。使用的語(yǔ)法取決于使用的版本控制系統(tǒng)。

  • connection詳細(xì)說(shuō)明只讀連接卫玖。
  • developerConnection詳細(xì)說(shuō)明讀取和寫入訪問連接詳細(xì)信息公你。
  • url包含了一個(gè)Web前端,您的SCM系統(tǒng)的URL假瞬。

Maven SCM文檔中提供了有關(guān)各種受支持格式的詳細(xì)信息陕靠,并提供了許多常見示例。

subversion

<scm>
  <connection>scm:svn:http://subversion.example.com/svn/project/trunk/</connection>
  <developerConnection>scm:svn:https://subversion.example.com/svn/project/trunk/</developerConnection>
  <url>http://subversion.example.com/svn/project/trunk/</url>
</scm>

github

<scm>
  <connection>scm:git:git://github.com/simpligility/ossrh-demo.git</connection>
  <developerConnection>scm:git:ssh://github.com:simpligility/ossrh-demo.git</developerConnection>
  <url>http://github.com/simpligility/ossrh-demo/tree/master</url>
</scm>

BitBucket

<scm>
  <connection>scm:git:git://bitbucket.org/simpligility/ossrh-pipeline-demo.git</connection>
  <developerConnection>scm:git:ssh://bitbucket.org:simpligility/ossrh-pipeline-demo.git</developerConnection>
  <url>https://bitbucket.org/simpligility/ossrh-pipeline-demo/src</url>
</scm>

BitBucket上的Mercurial

<scm>
  <connection>scm:hg:http://bitbucket.org/juven/hg-demo</connection>
  <developerConnection>scm:hg:https://bitbucket.org/juven/hg-demo</developerConnection>
  <url>http://bitbucket.org/juven/hg-demo</url>
</scm>

Apache Maven的Apache Git服務(wù)器上的Git

<scm>
  <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
  <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
  <url>https://github.com/apache/maven/tree/${project.scm.tag}</url>
  <tag>master</tag>
</scm>

完整的pom信息

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.smallbun.scaffold</groupId>
  <artifactId>scaffold-framework</artifactId>
  <version>1.0.0</version> 
  <packaging>jar</packaging>

  <name>smallbun-scaffold-framework</name>
  <description>smallbun企業(yè)級(jí)開發(fā)腳手架-核心框架</description>
  <url>http://www.smallbun.cn</url> 
 
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>

  <developers>
      <developer>
          <name>zuoqinggang</name>
          <email>qinggang.zuo@gmail.com</email>
          <url>https://www.pingfangushi.com</url>
      </developer>
  </developers>

  <scm>
      <connection>scm:git:git@github.com:pingfangushi/smallbun-scaffold-framework.git</connection>
      <developerConnection>scm:git:git@github.com:pingfangushi/smallbun-scaffold-framework.git
      </developerConnection>
      <url>http://github.com/pingfangushi/smallbun-scaffold-framework/tree/master</url>
  </scm>
...

</project>

Java doc和源代碼

要生成Javadoc和Source jar文件笨触,您必須配置javadoc和Source Maven插件懦傍。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.2.1</version>
      <executions>
        <execution>
          <id>attach-sources</id>
          <goals>
            <goal>jar-no-fork</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
      <executions>
        <execution>
          <id>attach-javadocs</id>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

GPG簽名

??為了提高中央存儲(chǔ)庫(kù)的質(zhì)量,maven中央倉(cāng)庫(kù)要求工件(除校驗(yàn)和之外的所有文件)提供PGP簽名芦劣,并將公共密鑰分發(fā)到諸如http://pgp.mit.edu的密鑰服務(wù)器粗俱。

安裝GnuPG

??從http://www.gnupg.org/download/下載GPG或使用您喜歡的軟件包管理器進(jìn)行安裝,然后通過運(yùn)行gpg --version命令進(jìn)行驗(yàn)證虚吟。

注:在某些系統(tǒng)上寸认,將使用較新的gpg2:gpg2 --version

生成密鑰對(duì)

密鑰對(duì)使我們可以使用GPG對(duì)工件進(jìn)行簽名签财,然后用戶可以驗(yàn)證工件是否已由我們簽名。執(zhí)行命令根據(jù)提示提供用戶名偏塞、郵箱唱蒸,密碼信息。

gpg --gen-key

列出秘鑰

gpg --list-keys

列出可以使用的私鑰

gpg --list-secret-keys

輸出中pub一行'/'后的8位HEX字符串就是密鑰ID

上傳到服務(wù)器

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys <密鑰ID>

--keyserver參數(shù)標(biāo)識(shí)目標(biāo)密鑰服務(wù)器地址灸叼,并使用--SEND-keys 是要分發(fā)密鑰的keyid的神汹。您可以通過gpg --list-secret-keys來(lái)獲取密鑰ID。一旦提交給密鑰服務(wù)器古今,公鑰將同步到其他密鑰服務(wù)器屁魏。

pom配置

Maven GPG插件用于通過以下配置對(duì)組件進(jìn)行簽名。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-gpg-plugin</artifactId>
      <version>1.5</version>
      <executions>
        <execution>
          <id>sign-artifacts</id>
          <phase>verify</phase>
          <goals>
            <goal>sign</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

上傳倉(cāng)庫(kù)

提交 issues

首先你需要有一個(gè)賬戶:點(diǎn)擊注冊(cè)
然后創(chuàng)建問題項(xiàng):創(chuàng)建問題

在未收到以解決的電子郵件之前捉腥,請(qǐng)不要進(jìn)行部署
提交問題不困難氓拼,這里不截圖講了,如果使用域名抵碟,需要配置解析到問題URL桃漾,將會(huì)自動(dòng)驗(yàn)證,正常情況下拟逮,白天提交撬统,第二天早上就可以收到回復(fù)了。

配置身份驗(yàn)證

打開maven setting.xml文件配置加入如下內(nèi)容

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>用戶名</username>
      <password>密碼</password>
    </server>
  </servers>
</settings>

pom配置

由于OSSRH始終運(yùn)行最新版本的Sonatype Nexus Repository Manager唱歧,因此最好使用Nexus Staging Maven插件的最新版本宪摧。

<distributionManagement>
  <snapshotRepository>
    <id>ossrh</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
  </snapshotRepository>
</distributionManagement>
<build>
  <plugins>
    <plugin>
      <groupId>org.sonatype.plugins</groupId>
      <artifactId>nexus-staging-maven-plugin</artifactId>
      <version>1.6.7</version>
      <extensions>true</extensions>
      <configuration>
        <serverId>ossrh</serverId>
        <nexusUrl>https://oss.sonatype.org/</nexusUrl>
        <autoReleaseAfterClose>true</autoReleaseAfterClose>
      </configuration>
    </plugin>
    ...
  </plugins>
</build>

或者,如果想使用Maven部署插件(默認(rèn))颅崩,則需要添加完整的distributionManagement几于。

<distributionManagement>
  <snapshotRepository>
    <id>ossrh</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
  </snapshotRepository>
  <repository>
    <id>ossrh</id>
    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
  </repository>
</distributionManagement>

推薦使用nexus-staging-maven-plugin發(fā)布

注:settings.xml server元素中的id元素與snapshotRepositoryand 元素中的repository元素以及serverIdNexus Staging Maven插件的配置如何相同

發(fā)布

如果版本是發(fā)行版(不要以-SNAPSHOT結(jié)尾),執(zhí)行deploy就可以了沿后。

mvn clean deploy
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沿彭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子尖滚,更是在濱河造成了極大的恐慌喉刘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漆弄,死亡現(xiàn)場(chǎng)離奇詭異睦裳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)撼唾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門廉邑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事蛛蒙〔诠浚” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵牵祟,是天一觀的道長(zhǎng)深夯。 經(jīng)常有香客問我,道長(zhǎng)诺苹,這世上最難降的妖魔是什么咕晋? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮筝尾,結(jié)果婚禮上捡需,老公的妹妹穿的比我還像新娘。我一直安慰自己筹淫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布呢撞。 她就那樣靜靜地躺著损姜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪殊霞。 梳的紋絲不亂的頭發(fā)上摧阅,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音绷蹲,去河邊找鬼棒卷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祝钢,可吹牛的內(nèi)容都是我干的比规。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拦英,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜒什!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疤估,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤灾常,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后铃拇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钞瀑,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年慷荔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雕什。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖监徘,靈堂內(nèi)的尸體忽然破棺而出晋修,到底是詐尸還是另有隱情,我是刑警寧澤凰盔,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布墓卦,位于F島的核電站,受9級(jí)特大地震影響户敬,放射性物質(zhì)發(fā)生泄漏落剪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一尿庐、第九天 我趴在偏房一處隱蔽的房頂上張望忠怖。 院中可真熱鬧,春花似錦抄瑟、人聲如沸凡泣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鞋拟。三九已至,卻和暖如春惹资,著一層夾襖步出監(jiān)牢的瞬間贺纲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工褪测, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猴誊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓侮措,卻偏偏與公主長(zhǎng)得像懈叹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萝毛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354