發(fā)布項目到Maven中央倉庫的最佳實踐

? ? 最近嘗試發(fā)布自己的項目到Maven中央倉庫,發(fā)現(xiàn)網(wǎng)上的教程雖然不少,但多多少少都有一些問題,其中最主要的問題是幾乎所有的教程都指定Maven項目的parent為oss-parent,然而Maven不支持多parent的情況,因此這樣操作必須要求原有的Maven項目無parent項目。下面言歸正傳,介紹一下我認為的發(fā)布項目到Maven中央倉庫的最佳實踐。

? ? 首先發(fā)布項目到Maven中央倉庫主要有以下步驟:

? ? 1. 在sonatype中創(chuàng)建issue

? ? 2. 使用gpg生成秘鑰

? ? 3. 配置Maven進行deploy和release

1. Sonatype

? ? Sonatype是一個通過Nexus對開源項目提供托管服務的網(wǎng)站。你可以通過它發(fā)布項目的快照(snapshot)或者穩(wěn)定版本(release)到Maven中央倉庫。我們只需要注冊一個Sonatype的賬號,新建一個issue,然后在項目的pom文件中進行配置即可。

1.1 新建issue

首先我們在?https://issues.sonatype.org/secure/Dashboard.jspa?新建一個issue。新建issue前需要登錄,如果還沒有賬號的話請先進行注冊。登錄后界面如下:

Sonatype

點擊導航欄上的Create按鈕,開始新建一個issue:

Create issue

????依次填寫Summary, Group Id, Project URL, SCM URL。填寫完成后點擊Create按鈕,一個issue就新建成功了。

issue

????新建成功issue后需要等待Sonatype的工作人員進行審核,審核時間大約兩小時左右,審核通過后issue的Status會轉變?yōu)镽esolved,此時你就可以進行下一步操作了。

2. 使用gpg生成秘鑰

2.1 安裝

????gpg(GunPG)是一款用于生成秘鑰的加密軟件。Windows下載地址:https://www.gpg4win.org/download.html?

? ? Ubuntu可以使用如下命令進行安裝:

sudo apt-get install gnupg

? ? 安裝后可以通過 gpg --version 命令查看是否安裝成功。

2.2 生成秘鑰

? ? 運行以下命令生成秘鑰,當前gpg版本為1.4.20:

gpg --gen-key

gpg --gen-key

? ? 運行后gpg要求你選擇加密算法,過期時間等等,這些直接選擇默認值即可。通過對比發(fā)現(xiàn),gpg 2.0以上的版本運行gpg --gen-key命令 會跳過這些步驟。

? ? 之后gpg要求你輸入姓名,郵箱以及關鍵的Passphrase,依次輸入即可。然后gpg為你生成了一對秘鑰。

gpg

? ? 注意此截圖中從倒數(shù)第四行開始就是gpg生成的秘鑰。pub代表公鑰,截圖中的AA96D540是此公鑰的摘要信息,后續(xù)步驟中會使用到。

? ? 通過?gpg --list-keys 命令可以查看秘鑰:

gpg

? ? 值得注意是,Windows下安裝了gpg 2.2.3,運行 gpg --gen-key 除了生成步驟更加簡單之外,顯示的結果也產(chǎn)生了一定的變化,gpg 2.2.3下生成的秘鑰如下:

gpg 2.2.3

2.3 上傳公鑰

? ? 生成秘鑰后,我們需要把公鑰上傳到服務器上。運行以下命令:

gpg2 --keyserver hkp://pool.sks-keyservers.net --send-keys AA96D54D

????其中AA96D540是gpg生成的公鑰。此處替換為你本地gpg生成的公鑰即可。

3. 配置Maven

? ? 配置Maven主要有兩種方式,方式一:依賴oss-parent。方式二:手動添加各種依賴。

? ? 方式一請參考這篇文章:https://www.iteblog.com/archives/1807.html

? ? 下面主要介紹以下如何在不設置parent的情況下配置Maven。

3.1 配置pom?

完整的pom參見:https://github.com/cheergoivan/totp-authenticator-spring-boot-starter/blob/master/pom.xml

首先在項目的pom文件中添加指向sonatype倉庫的<distributionManagement>

distributionManagement

上述的配置是將本項目的deploy倉庫設置為sonatype的倉庫。

繼續(xù)編輯pom,如果pom中不存在profile則添加一個<profiles>標簽,再在<profiles>下添加一個用于release的profile,主要使用了javadoc, source 和 gpg的build插件:

profile
profile

繼續(xù)編輯pom,添加license,倉庫,開發(fā)者等信息:

license

3.2 配置Maven

????由于sonatype需要身份認證,因此還需要在Maven的settins.xml文件中配置server ossrh。步驟:打開 MAVEN_HOME/conf/settings.xml,在標簽下添加一個server如下:

server

其中用戶名密碼為?ttps://issues.sonatype.org/secure/Dashboard.jspa?的用戶名和密碼。? ??

繼續(xù)編輯 MAVEN_HOME/conf/settings.xml, 在<profiles>標簽下添加一個對gpg支持的profile:

profile

the_pass_phrase 是使用gpg生成秘鑰時要求你輸入的密碼。

3.3 運行mvn deploy

運行以下命令進行deploy:

mvn clean deploy -P release

deploy

如圖所示,項目成功上傳之ossrh服務器上。

3.4 close and release

? ? 項目上傳到sonatype倉庫后,訪問?https://oss.sonatype.org/#stagingRepositories?進行查看。進入此網(wǎng)站后,可以看到正中間的Staging Repositories,直接下拉到最后一個,如圖:

stage

? ? 最后一個即為你發(fā)布到sonatype倉庫的項目,點擊左上角的close按鈕。當項目狀態(tài)變?yōu)閏losed之后,點擊release按鈕,輸入必要的description信息后,就發(fā)布成功了。大約幾小時后你就可以在中央倉庫上搜索到你的項目了!

3.5 自動release插件

? ? 最后提一下sonatype提供了自動release的插件,這意味著運行mvn clean deploy后不用手動去close-> release了,此插件會自動release我們的項目到Maven中央倉庫。引入方法:

auto-release

總結: 由于簡書富文本編輯器的bug,導致我無法復制xml文本,因此本文中的xml文本均為圖片,本文主要參考自sonatype官方文檔,大家可以去自行復制xml:http://central.sonatype.org/pages/apache-maven.html

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容