一、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 [email protected] 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