手把手教你如何將專案釋出到Maven中央倉庫

alterem發表於2019-05-23

一、Sonartype相關準備工作

1 前往 Sonartype[2] 註冊賬號,並記好賬號和密碼,後面有用

2 前往 Sonartype Dashboard[3] ,點選導航欄上的 Create 按鈕,並按提示填寫專案資訊:

img

個人為專案 light-security-spring-boot-starter 填寫的資訊如 OSSRH-47914[4] 所示 ,供大家參考。

3 建立 Issue 後,等待稽核即可。一般會在一個工作日內稽核完成。當Issue的Status變為RESOLVED 或 FIXED 後,即可進行下一步操作

二、GPG相關準備工作

2.1 安裝GPG

Mac安裝GPG:

brew install gpg

Ubuntu安裝GPG:

sudo apt-get install gnupg

2.2 GPG常用命令

gpg --version 檢查安裝成功沒 gpg --gen-key 生成金鑰對 gpg --list-keys 檢視公鑰 gpg --keyserver 伺服器地址 --send-keys 公鑰ID 將公鑰釋出到 PGP 金鑰伺服器 gpg --keyserver 伺服器地址 --recv-keys 公鑰ID 查詢公鑰是否釋出成功

2.3 生成祕鑰

gpg --gen-key 按照提示輸入姓名/郵箱,然後按O即可生成。

如果遇到問題,可詳見”遇到的問題一節”。

2.4 檢視本地祕鑰

gpg --list-keys

結果類似如下:

``` ➜ ~ gpg --list-keys

/Users/itmuch.com/.gnupg/pubring.kbx

pub rsa2048 2019-04-20 [SC] [有效至:2021-04-19] [xxxxxxxxx] uid [ 絕對 ] itmuch.com sub rsa2048 2019-04-20 [E] [有效至:2021-04-19] ```

三、配置Maven

TIPS

可參考官方文件配置https://central.sonatype.org/pages/apache-maven.html

1 修改專案的pom.xml,新增如下內容:

```xml

The Apache Software License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0.txt

itmuch eacdy0000@126.com https://github.com/eacdy

https://github.com/eacdy/light-security https://github.com/eacdy/light-security.git https://github.com/eacdy

ossrh https://oss.sonatype.org/content/repositories/snapshots ossrh https://oss.sonatype.org/service/local/staging/deploy/maven2/

release org.sonatype.plugins nexus-staging-maven-plugin 1.6.7 true ossrh https://oss.sonatype.org/ true org.apache.maven.plugins maven-release-plugin 2.5 true false release deploy org.apache.maven.plugins maven-source-plugin 2.2.1 attach-sources jar-no-fork org.apache.maven.plugins maven-javadoc-plugin 2.9.1 attach-javadocs jar org.apache.maven.plugins maven-gpg-plugin 1.5 sign-artifacts verify sign ```

可參考我的配置:Light Security Spring Boot Starter Pom.xml[5]

2 修改 $MAVEN_HOME/conf/settings.xml 檔案(即你的Maven配置檔案),新增如下內容:

xml <server> <!-- 這裡的ID要和distributionManagement.repository.id一致 --> <id>ossrh</id> <!-- https://issues.sonatype.org/的賬號 --> <username>賬號</username> <!-- https://issues.sonatype.org/的密碼 --> <password>密碼</password> </server>

四、修改專案版本

用如下命令,修改專案的版本,例如1.0.1-RELEASE

mvn versions:set -DnewVersion=1.0.1-RELEASE

當然也可手動修改版本,不過當專案比較複雜,module比較多時,手動修改就會比較麻煩,而且容易出錯。建議用命令修改。

五、釋出

執行如下命令即可將依賴釋出到中央倉庫。

bash mvn clean install deploy -P release

不出意外,構建會報xxx伺服器無法找到GPG的異常。原因是前文生成的祕鑰尚未釋出到key server。keyserver的地址會在異常中列印出來。我的專案報的是 http://keys.gnupg.net:11371/ 。於是執行

gpg --keyserver http://keys.gnupg.net:11371/ --send-keys [xxxxxxxxx] 其中的[xxxxxxxxx],可用gpg --list-keys顯示出來。

然後再次執行如下命令:

mvn clean install deploy -P release

此時即可釋出成功。釋出完使用如下命令重置為SNAPSHOT版本

mvn versions:set -DnewVersion=1.0.2-SNAPHOST

六、遇到的問題

6.1 執行 gpg --gen-keyKey generation failed: Timeout 的異常

解決方案:

bash rm -rf ~/.gnupg gpg --gen-key

6.2 執行mvn clean install deploy -P release 時,報gpg: signing failed: Inappropriate ioctl for device

原因是當前終端無法彈出密碼輸入頁面。

解決方案:

export GPG_TTY=$(tty) mvn clean install deploy -P release

6.3 連不上 https://oss.sonatype.org

  • 科學上網(在某些城市有被查水錶、罰款的風險),自己找梯子吧;
  • 飛到香港、澳門或者海外等能沒有牆的地方,然後釋出應用,釋出完再回國(一種人傻錢多的方式);
  • 移民(更徹底的解決方案,但如果想看抗日神劇或者聽某些國內音樂,可能要用梯子翻回來)……

七、參考文件

  • 官方文件[6]
  • 如何釋出jar包到maven中央倉庫[7]
  • 釋出專案至maven中央倉庫彙總(流程+問題)[8]
  • 向maven中央倉庫提交jar[9]
  • gpg: signing failed: Inappropriate ioctl for device[10]
  • Git 生成GPG key 報錯 Key generation failed: Timeout 的解決方法[11]

References

[1] light-security: https://www.github.com/eacdy/light-security [2] Sonartype: https://issues.sonatype.org/ [3] Sonartype Dashboard: https://issues.sonatype.org/secure/Dashboard.jspa [4] OSSRH-47914: https://issues.sonatype.org/browse/OSSRH-47914 [5] Light Security Spring Boot Starter Pom.xml: https://github.com/eacdy/light-security/blob/master/light-security-spring-boot-starter/pom.xml [6] 官方文件: https://central.sonatype.org/pages/apache-maven.htmll [7] 如何釋出jar包到maven中央倉庫: https://www.cnblogs.com/softidea/p/6743108.html [8] 釋出專案至maven中央倉庫彙總(流程+問題): https://blog.csdn.net/z69183787/article/details/81981423 [9] 向maven中央倉庫提交jar: https://www.cnblogs.com/gaoxing/p/4359795.html [10] gpg: signing failed: Inappropriate ioctl for device: https://blog.csdn.net/weixin_33924312/article/details/88146168 [11] Git 生成GPG key 報錯 Key generation failed: Timeout 的解決方法: https://blog.csdn.net/everblog/article/details/79031243

原創: itmuch

img

相關文章