上傳jar包到maven公共遠(yuǎn)程中央倉(cāng)庫(kù)

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)命名,例如下圖:


groupId命名

可以使用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è)地址

https://issues.sonatype.org

【第一步】點(diǎn)擊登錄框下方的Sign up

注冊(cè)

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


填寫信息
注冊(cè)成功

【第二步】登錄申請(qǐng)新項(xiàng)目

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

創(chuàng)建項(xiàng)目申請(qǐng)

創(chuàng)建項(xiàng)目申請(qǐ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菜單可以看到你的最近提交。


issues

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

查看提交狀態(tài)

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

回復(fù)的建議

申請(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)】:

  1. 就是單個(gè)文件不能超過(guò)1024M,如果超過(guò)需要聯(lián)系管理員來(lái)上傳。
  2. 還需要注意的是release版本一旦上傳部署后將不允許更新、修改、刪除,只能上傳新的版本。
  3. -SNAPSHOT作為版本號(hào)結(jié)尾不會(huì)直接上傳至正式的中央倉(cāng)庫(kù),而是上傳至成功部署的 SNAPSHOT 版本將上傳至 https://s01.oss.sonatype.org/content/repositories/snapshots/
  4. 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/。

Staging Repositories

如果你覺(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ān)閉錯(cuò)誤

檢測(cè)報(bào)告

可以通過(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)題了。


closed

確認(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ù)中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容