1 注冊(cè)maven(oss)賬號(hào)
注冊(cè)地址:
https://issues.sonatype.org/secure/Signup!default.jspa
注冊(cè)成功后登陸到首頁(yè)
2 創(chuàng)建一個(gè)Issue
Project: 項(xiàng)目類(lèi)型,一般為Community Support。
Issue Type: 問(wèn)題類(lèi)型, 新的項(xiàng)目為New Project。
Summary:項(xiàng)目名稱,如HASentinel。
Description:項(xiàng)目描述,介紹一下當(dāng)前項(xiàng)目。
Group Id:對(duì)應(yīng)pom.xml里的group id。如果你有個(gè)人或企業(yè)的域名,可以為公司的域名,審核時(shí)候需要驗(yàn)證當(dāng)前域名為本人所有,如com.eeeffff.hasentinel,其中com.eeeffff須為域名eeeffff.com的擁有者,如果沒(méi)有可以寫(xiě)github對(duì)應(yīng)的個(gè)人地址(如:com.github.potenstop)
Project URL: 項(xiàng)目的地址,如
https://github.com/fenglibin/HASentinel 。
SCM url:項(xiàng)目對(duì)應(yīng)的下載地址,如
https://github.com/fenglibin/HASentinel .git。
其他保持默認(rèn)。填寫(xiě)完成后就可以create了。
3 域名擁有者驗(yàn)證
項(xiàng)目創(chuàng)建成功后,會(huì)有一個(gè)項(xiàng)目編輯,如下所示:
然后根據(jù)其要求,到域名提供商那里做一條TXT解析,這是最快的一種認(rèn)證方式:
域名服務(wù)商增加該域名eeeffff.com的TXT解析:
記錄值即為為該項(xiàng)目對(duì)應(yīng)的項(xiàng)目代碼值。
4 pgp生產(chǎn)秘鑰key
我的電腦是linux Ubuntu18,Ubuntu本身包含了gpg這個(gè)命令,因而不需要額外的下載,如果是其它系統(tǒng),可能需要下載相應(yīng)的軟件或命令。
生成加密key,使用命令“gpg --gen-key”:
查看生成的加密Key,使用命令“gpg --list-keys”:
將加密Key推送加遠(yuǎn)程加密服務(wù)器,此處我推到Ubuntu的加密服務(wù)器:
推送如果不報(bào)錯(cuò),則說(shuō)明推成功,如果推失敗則多嘗試幾次,或者換一個(gè)遠(yuǎn)程加密服務(wù)器,加密服務(wù)器之間會(huì)相互同步數(shù)據(jù)。
查看推送的加密Key:
這步一定要驗(yàn)證一下,以確保推送真的成功了,如果獲取失敗則多嘗試幾次,我這邊第一次操作就顯示失敗了。
5 配置settings.xml
在maven對(duì)應(yīng)的config目錄下的settings.xml中的services節(jié)點(diǎn)下增加一個(gè)service節(jié)點(diǎn),配置你當(dāng)前sonatype的用戶名和密碼,用于后續(xù)jar包遠(yuǎn)程推送到maven做權(quán)限驗(yàn)證,這里的id要和pom.xml中distributionManagement配置的id要一一對(duì)應(yīng),如我配置的為
<server>
<id>ossrh</id>
<username>maven_username</username>
<password>maven_password</password>
</server>
6 配置pom.xml
發(fā)布到maven倉(cāng)庫(kù)的項(xiàng)目,要求配置如下內(nèi)容:
name: 項(xiàng)目名稱。
description: 項(xiàng)目描述。
url: 項(xiàng)目地址
licenses: 開(kāi)源協(xié)議。
developers: 開(kāi)發(fā)者列表。
scm: 項(xiàng)目的git地址相關(guān)。
profiles: 配置不同的環(huán)境。比如開(kāi)發(fā)環(huán)境 測(cè)試環(huán)境 發(fā)布環(huán)境。
groupId: 定義當(dāng)前maven項(xiàng)目隸屬的實(shí)際項(xiàng)目。
artifactId: 該元素定義實(shí)際項(xiàng)目中的一個(gè)Maven項(xiàng)目(模塊).
version: 版本號(hào), 帶SNAPSHOT為快照版本,否則為 release 版本。
build: 插件。需要加上maven-source-plugin、maven-JAVAdoc-plugin、maven-gpg-plugin三個(gè)插件
dependencies: 依賴的模塊。
pom.xml 配置參考如下截圖及配置代碼所示:
<!-- 配置必須的插件 -->
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven.deploy.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.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>3.3.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 配置項(xiàng)目發(fā)布的maven倉(cāng)庫(kù)路徑 -->
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Release</name>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
<snapshotRepository>
<id>ossrh</id>
<name>SNAPSHOTS</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
7 發(fā)布版本
都配置成功后,此時(shí)轉(zhuǎn)到項(xiàng)目的根目錄下,執(zhí)行如下maven打包及發(fā)布命令:
mvn clean source:jar install deploy -Dmaven.test.skip
如果沒(méi)有報(bào)錯(cuò),則輸出如下截圖所示:
此時(shí)可以在創(chuàng)建項(xiàng)目的sonatype頁(yè)面給負(fù)責(zé)和你對(duì)接的人留言,讓他執(zhí)行下一步操作,他會(huì)告訴你下一步該做什么:
8 在oss查看快照
發(fā)布快照版本,只需要在版本號(hào)后面加上SNAPSHOT字符串,重新打包即可,Maven會(huì)自動(dòng)判斷當(dāng)前發(fā)布為快照版本,快照版本可以無(wú)限次發(fā)布,不需要在倉(cāng)庫(kù)中刪除后再發(fā)布。
查看地址:
https://s01.oss.sonatype.org
可以根據(jù)GroupID搜索對(duì)應(yīng)工程的快照的信息,查看快照是不需要登陸的,如下圖所示。
9 發(fā)布和查看release版本
發(fā)布release版本只需要去掉版本號(hào)后面的的SNAPSHOT,重新執(zhí)行deploy即可,但是請(qǐng)記住,此時(shí)deploy成功并不是真的發(fā)到了線上的Maven倉(cāng)庫(kù),此時(shí)相當(dāng)于發(fā)到了一個(gè)預(yù)發(fā)布倉(cāng)庫(kù),此時(shí)需要用戶去執(zhí)行項(xiàng)目檢查,包括javadoc生成是否符合規(guī)范、pom文件是否包含了scm地址等信息、是否通過(guò)gpg生成了校驗(yàn)asc文件等等,如果通不過(guò)會(huì)有相應(yīng)的提示,完成這些修改后才能后關(guān)閉當(dāng)前issue,執(zhí)行真正的發(fā)布動(dòng)作。
查看release版本需要登錄才可以看到, 用戶名和密碼和注冊(cè)maven一致。
執(zhí)行項(xiàng)目檢查的步驟:1)選中一個(gè)項(xiàng)目;2)執(zhí)行上面的Close操作,然后項(xiàng)目會(huì)執(zhí)行規(guī)范及安全檢查,如果通過(guò)則release按鈕會(huì)變得可用,如果檢驗(yàn)沒(méi)有通過(guò),則會(huì)有相應(yīng)的提示信息,需要根據(jù)提示修改,在執(zhí)行下一次執(zhí)行deploy之前,先通過(guò)Drop功能刪除掉當(dāng)前項(xiàng)目。
校驗(yàn)不通過(guò)大致信息如下所示:
此處展示了三種類(lèi)型的錯(cuò)誤:
簽名校驗(yàn)錯(cuò)誤;
pom文件校驗(yàn)錯(cuò)誤;
Javadoc校驗(yàn)錯(cuò)誤。
10 正式同步到Maven中央庫(kù)
如果是第一次發(fā)布,需要在release成功后在之前的issue添加評(píng)論,告知該項(xiàng)目預(yù)計(jì)release成功。如下圖:
待管理人員正式執(zhí)行同步,等待一段時(shí)間,就可以在maven的正式倉(cāng)庫(kù)中執(zhí)行到該項(xiàng)目了。
Maven倉(cāng)庫(kù)(https://search.maven.org/)中搜索項(xiàng)目:






