手把手教你如何將專案釋出到Maven中央倉庫
一、Sonartype相關準備工作
1 前往 Sonartype[2] 註冊賬號,並記好賬號和密碼,後面有用。
2 前往 Sonartype Dashboard[3] ,點選導航欄上的 Create
按鈕,並按提示填寫專案資訊:
個人為專案 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-key
報 Key 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
相關文章
- 如何將JAR包釋出到Maven中央倉庫?JARMaven
- 將自己的開源專案釋出到 Maven 中央倉庫Maven
- 圖文教程:從0到1將專案釋出到 Maven 中央倉庫Maven
- Java Maven專案推送到 Maven 中央倉庫JavaMaven
- 如何釋出自己的專案到中央倉庫
- Maven中央倉庫釋出歷程Maven
- 釋出jar包到maven中央倉庫JARMaven
- Maven中央倉庫地址大全Maven
- Maven 中央倉庫地址大全Maven
- maven阿里雲中央倉庫Maven阿里
- Maven 教程之釋出 jar 到私服或中央倉庫MavenJAR
- 釋出構件到 Maven 中央倉庫遇到的坑Maven
- nutwk的maven中央倉庫及配置Maven
- 利用yarn檔案釋出到 npm 倉庫YarnNPM
- 使用CI/CD工具Github Action釋出jar到Maven中央倉庫GithubJARMaven
- Maven中GeoTools的引入及Maven中央倉庫地址大全Maven
- 使用gradle外掛釋出專案到nexus中央倉庫Gradle
- jar包上傳Maven中央倉庫吐血筆記JARMaven筆記
- Docker將映象檔案釋出到私服庫Docker
- 我把自己的java庫釋出到了maven中央倉庫,從此可以像Jackson、Spring的jar一樣使用它了JavaMavenSpringJAR
- 手把手教你提交Jar包到Maven公共倉庫 | 萌新寫開源02JARMaven
- maven中央倉庫訪問速度太慢的解決辦法Maven
- nexus 中央倉庫
- 基於Google雲端儲存的開放Maven映象中央倉庫GoMaven
- Maven 打包釋出到nexusMaven
- 手把手教你配置git和git倉庫Git
- 手把手教你搭建Docker私有倉庫HarborDocker
- maven 將本地jar打入本地倉庫MavenJAR
- 研發提效必備技能:手把手教你基於Docker搭建Maven私服倉庫DockerMaven
- Maven 倉庫Maven
- 建立映象釋出到映象倉庫【不依賴docker環境】Docker
- 手把手教你用 Nuget 管理自己的專案庫
- 如何使用GitHub建立Maven私有倉庫GithubMaven
- 將maven、gradle倉庫遷移到d盤MavenGradle
- 使用Gradle釋出工件到Maven倉庫GradleMaven
- Docker將映象檔案釋出到阿里雲Docker阿里
- 如何將WHQL驅動程式釋出到 Windows 更新Windows
- 處理Maven本地倉庫.lastUpdated檔案MavenAST