記一次上傳jar到maven中央倉庫記錄
最近利用工作閒暇之餘,開發了一個基於logback底層的日誌脫敏工具jar 包(歡迎大家吐槽:logback日誌脫敏工具),同事推薦上傳到maven中央倉庫,方便大家使用。於是萌生了上傳jar 包到maven中央倉庫的想法,在此分享一下將jar包釋出到Maven中央倉庫的過程以及常見錯誤的解決辦法。
一、建立jira工單
1.1、註冊Sonatype帳號:
1.2、建立提交jar 包申請工單:
登入後選擇Create Issue, 選擇Community Support - Open Source Project Repository Hosting (OSSRH)以及New Project, 其他按照自己的專案情況填寫。
必填項
Project:Community Support - Open Source Project Repository Hosting IssueType:New Project Summary:專案說明,介紹一下專案 GroupId:專案的GroupId ProjectURL:專案主頁的URL,填寫專案主頁地址 SCMurl:專案git程式碼的URL,填寫倉庫git程式碼地址 其他的選填按照自己的專案情況填寫
填寫完畢後點擊Create後,工單即建立成功,工單此時狀態為Open
1.3、工單稽核
工單建立成功幾小時內(晚上11過後回覆時間比較快,國內與美國有時差)會有工作人員稽核工單,在工單Comments區問你是否有Group Id對應的那個域名的所有權(此處為全英文回覆,如果英文不好的同事可以使用谷歌翻譯,個人感覺比百度翻譯準確太多),如果有的話就直接回複相關資訊。如果自己沒有域名的話可以掛在開源的域名(如gitee.com或github.com)下面,例如com.gitee.cqdevops,使用開源的域名有一點需要注意:Group Id必須與你的開源域名匹配,例如我的開源域名為
二、釋出jar 包
2.1、配置maven settings.xml檔案
在settings.xml檔案servers配置下面新增server配置,使用者名稱和密碼為註冊Sonatype時的使用者名稱和密碼
<servers> <server> <id>snapshot</id> <username>使用者名稱</username> <password>密碼</password> </server> <server> <id>releases</id> <username>使用者名稱</username> <password>密碼</password> </server> </servers>
2.2、配置專案pom.xml檔案
在pom檔案中新增如下配置
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
<name>xxxxxxxx</name>
<description>xxxxx</description>
<url>xxxx</url>
<!-- license 資訊 -->
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>actable</distribution>
</license>
</licenses>
<!-- 開發者資訊 -->
<developers>
<developer>
<name>xxx</name>
<email>[email protected]</email>
<organization>xxxx</organization>
<url>xxxxxxxxxxxxxxxxxx</url>
</developer>
</developers>
<!-- SCM資訊 -->
<scm>
<connection>xxxxx</connection>
<developerConnection>xxxxx</developerConnection>
<url>https://gitee.com/sunchenbin/mybatis-enhance</url>
<tag>1.0</tag>
</scm>
<!-- 配置生成javadoc和sources包的外掛 -->
<build>
<plugins>
<!--指定編譯器版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
<!--打包原始碼-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<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.10.3</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!--gpg加密-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<!-- 這個id需要在setting.xml中設定 -->
<id>snapshot</id>
<!-- 這裡的url就是Issue中回覆的snapshots 的repo地址-->
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>releases</id>
<!-- 這裡的url就是Issue中回覆的staging 的repo地址-->
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
2.3、使用gpg生成金鑰
2.3.1、安裝gpg
<!-- windows -->
Windows系統直接去https://www.gpg4win.org/download.html下載Gpg4win
<!-- mac -->
brew install gpg
<!-- Linux -->
yum install gpg
2.3.2、檢視gpg版本
gpg --version
2.3.3、生成金鑰,提示輸入:Real name、Email address,根據提示輸入大寫O確認,然後彈出一個輸入密碼的對話方塊,請記住該密碼
gpg --gen-key
2.3.4、檢視公鑰
gpg --list-keys
2.3.5、將公鑰釋出到 gpg 金鑰伺服器(gpg --list-keys可以看到公鑰id)
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys xxxxxxxxxxxxxxxx
2.3.6、查詢公鑰是否釋出成功,如果沒有發成功再發布一次
gpg --keyserverhkp://pool.sks-keyservers.net --recv-keys xxxxxxxxxxxxxxxx
注意:有可能因為gpg版本太高,導致釋出時出現,處理方式如下:
在gpg的安裝目錄(~/.gnup
)下新建兩個配置檔案: gpg.conf
:
use-agent
pinentry-mode loopback
gpg-agent.conf
:
allow-loopback-pinentry
2.4、上傳構件到 OSS 中
此時上傳的構件並未正式釋出到中央倉庫中,只是部署到 OSS 中了,過程中可能需要你手動輸入密碼
注意:使用mvn命令中預設使用settings.xml檔案中的配置,請確保上文servers配置正確配置到settings.xml檔案中
<!-- 自己配置profiles時 -->
mvn clean deploy -P releases
<!-- 使用官網parent時使用 -->
mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=金鑰密碼"
2.5、在OSS 系統中釋出構件
登入 https://oss.sonatype.org系統,帳號和密碼為註冊Sonatype時的帳號和密碼。在 Staging Repositories 中檢視剛才已上傳的jar 包,這些構件目前是放在Staging 倉庫中。此時,該構件的狀態為 Open,需要勾選它,然後點選 Close 按鈕。系統會自動驗證該構件是否滿足指定要求,當驗證完畢後,狀態會變為Closed。最後,點選 Release 按鈕來發布該構件
2.6、通知 Sonatype 構件已成功釋出
在之前建立的jira工單下面回覆“I was completed”,通知工作人員為需要釋出的構件做審批,當審批通過後,會關閉該jira工單並且會收到郵件通知。至此,就可以在maven的中央倉庫中搜索到自己釋出的構件,可以直接在pom.xml中使用了。
三、總結
第一次釋出jar 包到maven中央倉庫斷斷續續的進行了四天左右,因為是第一次釋出到中央倉庫,不清楚jira工單審批時間,耽誤一些時間,並且其間遇到了很多沒有預想到的問題。特此記錄下來,希望能給更多的人一些幫助吧。