Open Source Software Repository Hosting 簡(jiǎn)稱 OSSRH
https://central.sonatype.org/publish/
這里簡(jiǎn)單的介紹了中央倉(cāng)庫(kù)。
這里提前說(shuō)明一下GroupId的選擇(Choose your coordinates)
https://central.sonatype.org/publish/requirements/coordinates/
GroupId簡(jiǎn)單說(shuō)就像類似java的package,用來(lái)唯一定位你的項(xiàng)目。你可以使用你的域名的反轉(zhuǎn)來(lái)命名,例如www.springframework.org -> org.springframework,也可以用連字符,但是java中是不允許的,因此java中的包不一定與groupId是一致的。
申請(qǐng)前需要了解的注意的事項(xiàng):
Group Id:如果是公網(wǎng)的域名,例如com,org等域名相關(guān),需要驗(yàn)證域名,審批過(guò)程過(guò)程中會(huì)給定ticketname,創(chuàng)建一個(gè)txt類型的解析來(lái)驗(yàn)證。
如果沒(méi)有自己的域名也可以使用公共的代碼管理服務(wù)平臺(tái)來(lái)域名來(lái)命名,例如下圖:

可以使用io.github.myusername,io.gitlab.myusername等。只需要做一下簡(jiǎn)單的驗(yàn)證。例如io.github.myusername,你必須創(chuàng)建一個(gè)審批過(guò)程中給定的一個(gè)ticketnumber,在自己的項(xiàng)目中創(chuàng)建對(duì)應(yīng)的項(xiàng)目,例如:github.com/myusername/OSSRH-TICKETNUMBER ,這個(gè)路徑可以訪問(wèn)就可以(公開庫(kù),否則無(wú)法訪問(wèn)),注冊(cè)完成就可以刪除。
倉(cāng)庫(kù):不一定非要是公開的庫(kù),審批過(guò)程只是上面提到的項(xiàng)目驗(yàn)證,來(lái)驗(yàn)證你是否真有這個(gè)庫(kù)的所有權(quán)。
以上了解后就可以先申請(qǐng)賬號(hào),申請(qǐng)注冊(cè)地址
【第一步】點(diǎn)擊登錄框下方的Sign up

填寫相關(guān)信息,很簡(jiǎn)單


【第二步】登錄申請(qǐng)新項(xiàng)目
右上角點(diǎn)擊Create,Project選擇第一項(xiàng),有的時(shí)候帶不出來(lái)第二個(gè)New Project,可以再選一次Project的選項(xiàng)。


下面的選項(xiàng):
Summary:按你的項(xiàng)目大概一個(gè)名字
Description:可以不填。
Group Id:就是maven引入包時(shí)的group id,這里需要注意的是如果出現(xiàn)com.xxx,需要有對(duì)應(yīng)的域名才可以申請(qǐng)。并且會(huì)要求你添加域名的txt解析。
ProjectURL :項(xiàng)目地址,不帶.git的結(jié)尾。
SCM url: 帶.git 結(jié)尾的路徑
Username(s):可以添加后續(xù)有權(quán)限上傳這個(gè)庫(kù)的用戶,如果只有你自己,那就不需要填寫。
Already Synced to Central:選擇No。
點(diǎn)擊創(chuàng)建。
【第三步】等待審核
在上面Issues菜單可以看到你的最近提交。

Status為提交狀態(tài),剛申請(qǐng)為open,下方comments為審核意見。
晚上回復(fù)的還是挺快的,基本20分鐘左右就會(huì)有回復(fù)。
可以注意查收郵件,如有收到相關(guān)郵件就表明有相關(guān)的建議恢復(fù),注意閱讀相關(guān)建議。

下圖是回復(fù)的修改意見截圖,一個(gè)是項(xiàng)目的驗(yàn)證,一個(gè)是域名的驗(yàn)證。驗(yàn)證域名采用txt解析驗(yàn)證,如果有域名則登錄對(duì)應(yīng)的域名提供商添加域名解析,解析的txt就是他給出的校驗(yàn)碼 OSSRH-xxxxx。

申請(qǐng)修改了或者添加了驗(yàn)證后需要在more重新刷新狀態(tài)。將狀態(tài)重新打開為open。
如果驗(yàn)證都沒(méi)有問(wèn)題,最后狀態(tài)為RESOLVED,comments中會(huì)發(fā)送Congratulations!Welcome to the Central Repository!提示。提示中有相應(yīng)的教程鏈接幫助你自動(dòng)發(fā)布包。
開始部署
https://central.sonatype.org/publish/publish-guide/#review-requirements
可以選擇不同的部署工具,常用的就是Apache Maven。
【需要說(shuō)明幾點(diǎn)】:
- 就是單個(gè)文件不能超過(guò)1024M,如果超過(guò)需要聯(lián)系管理員來(lái)上傳。
- 還需要注意的是release版本一旦上傳部署后將不允許更新、修改、刪除,只能上傳新的版本。
- -SNAPSHOT作為版本號(hào)結(jié)尾不會(huì)直接上傳至正式的中央倉(cāng)庫(kù),而是上傳至成功部署的 SNAPSHOT 版本將上傳至 https://s01.oss.sonatype.org/content/repositories/snapshots/
- release版本不能以-SNAPSHOT作為版本號(hào)結(jié)尾。
配置倉(cāng)庫(kù)認(rèn)證
在本地倉(cāng)庫(kù)級(jí)別的配置文件中setting.xml添加上面申請(qǐng)的用戶名和密碼。
<settings>
<servers>
<server>
<id>ossrh</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
</servers>
</settings>
配置插件
在自己的項(xiàng)目pom.xml中配置,本身已經(jīng)配置的Maven deploy plugin,可以使用下面配置
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
....
<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://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
建議使用The Nexus Staging Maven Plugin
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.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://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
...
</plugins>
</build>
對(duì)于需要上傳源代碼和javadoc的配置
<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>
發(fā)布測(cè)試
可以先使用-SNAPSHOT作為版本號(hào),版本號(hào)如果以-SNAPSHOT結(jié)尾,執(zhí)行以下命令將默認(rèn)上傳至snapshot庫(kù)。
mvn clean deploy
執(zhí)行后會(huì)默認(rèn)上傳以下鏈接庫(kù),可以上去看看自己的庫(kù)是否上傳成功。
https://s01.oss.sonatype.org/content/repositories/snapshots/
本地工程引入測(cè)試
可以將自己發(fā)布的包c(diǎn)lean或者刪除資源庫(kù)的文件夾,然后新建一個(gè)測(cè)試工程添加指定倉(cāng)庫(kù),添加你的依賴做測(cè)試,看是否正常下載。
<repositories>
<repository>
<id>nexues</id>
<name>snapshots</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
如果測(cè)試沒(méi)有問(wèn)題就可以發(fā)布正式版了。
正式版發(fā)布
修改版本號(hào)
mvn versions:set -DnewVersion=1.0.0
確認(rèn)版本號(hào)更新沒(méi)有問(wèn)題,然后執(zhí)行發(fā)布release
mvn clean deploy -P release
https://central.sonatype.org/publish/release/
執(zhí)行完命令后并沒(méi)有直接發(fā)布,而是發(fā)布到臨時(shí)資源庫(kù)(staging repository)。
登錄資源庫(kù)
使用OSSRH用戶名密碼登錄到以下鏈接(從2021 年 2 月開始所有新項(xiàng)目使用這個(gè)鏈接)https://s01.oss.sonatype.org/,如果找不到你的項(xiàng)目那就登錄https://s01.oss.sonatype.org/。

如果你覺(jué)得上傳沒(méi)有問(wèn)題,點(diǎn)擊Close,系統(tǒng)會(huì)做出評(píng)估,會(huì)等待一段時(shí)間,Release會(huì)被激活。
如果存在問(wèn)題會(huì)給重新激活Close按鈕,會(huì)在Activity中提示問(wèn)題,并且會(huì)對(duì)包進(jìn)行檢測(cè)發(fā)布一些漏洞威脅警告的郵件。


可以通過(guò)上方的Drop按鈕放棄,修正后重新上傳。
剛才遇到的問(wèn)題是沒(méi)有加簽名,以下這幾個(gè)文件需要對(duì)應(yīng)的簽名。
example-1.0.0.pom
example-1.0.0.jar
example-1.0.0-sources.jar
example-1.0.0-javadoc.jar
簽名文件
example-1.0.0.pom.asc
example-1.0.0.jar.asc
example-1.0.0-sources.jar.asc
example-1.0.0-javadoc.jar.asc
簽名工具下載
安裝gpg客戶端,可以在控制臺(tái)驗(yàn)證是否安裝成功gpg或者gpg2測(cè)試。
安裝完成會(huì)提示你創(chuàng)建一個(gè)證書,按照提示創(chuàng)建證書。
配置maven的setting.xml配置文件,在<profiles></profiles>中添加
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>the_pass_phrase</gpg.passphrase>
</properties>
</profile>
需要重啟ide工具(編譯時(shí)需要gpg命令行),然后重新clean,install,會(huì)提示輸入證書密碼,成功后在對(duì)應(yīng)項(xiàng)目的target目錄中生成相應(yīng)的jar.asc ,pom.asc。
經(jīng)過(guò)幾輪的修改,包括證書,javadoc,javasource,jar引用的漏洞修復(fù),終于沒(méi)有問(wèn)題了。

確認(rèn)無(wú)誤后就可以點(diǎn)擊Release了。
對(duì)于不需要發(fā)布的包的處理
可在maven plugins配置中添加如下設(shè)置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
可以跳過(guò)發(fā)布,就不會(huì)上傳至資源庫(kù)中。