1. 程式人生 > >釋出專案到maven中央倉庫

釋出專案到maven中央倉庫

可能很多人都在用maven倉庫,但是如果要問怎麼釋出專案到中央倉庫,估計很多人都不知道了,下面本篇文章帶大家往中央倉庫釋出一個自己的maven專案。

往maven中央倉庫釋出元件的過程是與Sonatype工作人員互動的過程,這個過程是在Sonatype的JIRA平臺上完成的,過程如下:

    在Sonatype的JIRA註冊

    提交一個issue(提出一個釋出申請),告訴工作人員我要建立一個構件。

    等待工作人員審批,會給你發郵件,在這個issue下給你comment說明通過或者哪裡有問題。

    上傳構件

    釋出構建,並在哪個issue下告訴工作人員我釋出了

    等待稽核,如果通過會告訴你需要release一下並在issue上告訴工作人員我release了

    釋出成功

    後續更新

1. 註冊帳戶

註冊地址是 https://issues.sonatype.org/secure/Signup!default.jspa

裡邊所有的欄位都是必填的,其中email很重要,之後工作人員和你溝通都是通過該郵箱進行的。

2. 建立一個 Issue

地址是 https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

這裡需要特別說明的是Group Id,如果你是託管在Github或者[email protected] 可以使用com.github.XXX或者net.oschina.XXX,我之前註冊了個自己的域名com.qiaoguanhua,所以在此可以填寫這個group(我實際釋出的是com.github.935237604),剩下的可以依照實際情況填寫,例如託管的地址等等(託管地址等資訊會在用去去maven倉庫搜尋的時候顯示,用來幫助使用者找到你的專案地址尋求幫助)。另外此處填寫的group id必須和你要釋出的元件的pom中的group id一樣,必須一樣!!!

3. 等待Issue審批

審批就是等著稽核人員告訴你稽核是否通過,如果不通過稽核人員會告訴你不通過的原因,例如當你用的是自己的域名時(不是github)稽核人員會詢問你域名是否是你的,回覆一下就行,然後工作人員就會給出下圖的回覆:

這個是工作人員告訴我已經通過了,可以去下面那個地址釋出(前兩個地址),釋出後去下面後兩個地址搜尋。

4. 使用 GPG 生成金鑰對

這個步驟是不是很突然?GPG是幹嘛的?我開始也很迷茫,後來看官方文件說是簽名構建用的,貌似為了保證你的構件不被第三方篡改,用於驗證,神馬原理呢?就是用這個東西在本地生成一個公鑰和一個私鑰,把公鑰上傳上去,當釋出的時候用私鑰簽名一下(這個由maven-gpg-plugin搞定,不用我們自己來)。步驟如下(此處不詳細介紹安裝,不會安裝的自行百度):

(1)生成公鑰私鑰

 gpg  --gen-key

然後一路回車,輸入使用者名稱、郵箱等,最後重複兩次輸入Passphase(這個在釋出的時候需要,在此牢記)

(2)檢視公鑰私鑰

gpg --list-keys

(3)釋出公鑰

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys C990D076(這個C990D076是上一步檢視的公鑰ID)

5.修改setting.xml

setting.xml這個檔案存在於兩個地方,一個是使用者的Maven配置檔案,在${user}/.m2/setting.xml,${user}表示你的使用者目錄,這個檔案只對當前使用者有效,另一個在你Maven安裝目錄的conf/setting.xml檔案,這個是全域性的配置檔案,考慮到我的電腦只有自己用,所以只用全域性配置檔案新增內容如下:


這裡的使用者名稱密碼就是我們在第一部註冊的時候的使用者名稱和密碼。

6. 修改pom.xml檔案

pom.xml在Maven中央庫的稽核比較嚴格,必須有固定的一些欄位,還有釋出的構件必須包含位元組碼jar、原始碼jar、文件jar,這些都可以通過maven外掛搞定,具體這個檔案我就不貼了,其中必須欄位是:

  • name

  • description

  • url

  • licenses

  • developers

  • scm

貼下我的pom各位可以做參考:

截圖由於截不全,所以截了兩張,下面附上程式碼:

<profile>
            <id>release</id>
            <distributionManagement>
                <snapshotRepository>
                    <id>oss</id>
                    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
                </snapshotRepository>
                <repository>
                    <id>oss</id>
                    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
                </repository>
            </distributionManagement>
            <build>
                <plugins>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>3.0.1</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Javadoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.10.4</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Gpg Signature -->
                    <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>
        </profile>

其中:

圖中標註紅色部分的ID必須與setting.xml中的一致,url是提交issue時工作人員給你的,這兩個url一般都是固定的,其他不用管。

7. 釋出到OSS

這一步主要是生成相應的一些jar包和簽名檔案,並上傳到OSS的伺服器,命令也比較簡單,命令如下:

 mvn clean deploy -P release -Dgpg.passphrase=你的Passphase

其中passphase是第四步生成公鑰私鑰時自己輸入的passphase,用你的passphase替換到此處的passphase即可。

8. 釋出構件

進入https://oss.sonatype.org並登陸,會在左側有個staging Repositories點選進入,在右側面板找到你的構件,狀態應該是open,你要將其置為closed,點選上方的close按鈕即可(close的時候可能會遇到一些問題,最常見的就是group id與你提交的不符,一般修改group id重新上傳後即可),close成功後點擊release。圖示:

9. 在Issue中通知工作人員

然後回到JIRA中你的Issue,寫個comment,我寫的是Component has been successfully issued.告訴工作人員我釋出完成了,等待他們稽核。稽核通過後我們就可以在中央庫搜尋到我們的構件了!

10.後續更新

後續如果你的構建更新了只需重複第七、八步重新上傳即可,不需要再通知工作人員了。

11.注意事項

構件釋出成功後並不能第一時間在maven倉庫搜尋到,有一定延遲(我第一次釋出時以為釋出失敗了,反覆詢問工作人員才知道有延遲,而且這個延遲時間很長........大坑啊.....),可以先去

https://oss.sonatype.org/content/groups/public/

搜尋(根據group id一層一層搜尋),然後等待一段時間等待maven中央倉庫同步,就可以在maven中央倉庫搜尋到了。

如果在釋出過程中有任何疑問請加Q1213812243。

如果感覺文章不錯請搜尋微信公眾號java初學者並關注,您也可以掃描下方二維碼關注,您的支援是我更新的動力。