發佈項目到maven中央倉庫

可能不少人都在用maven倉庫,可是若是要問怎麼發佈項目到中央倉庫,估計不少人都不知道了,下面本篇文章帶你們往中央倉庫發佈一個本身的maven項目。java


往maven中央倉庫發佈組件的過程是與Sonatype工做人員交互的過程,這個過程是在Sonatype的JIRA平臺上完成的,過程以下:git


    在Sonatype的JIRA註冊

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

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

    上傳構件

    發佈構建,並在哪一個issue下告訴工做人員我發佈了

    等待審覈,若是經過會告訴你須要release一下並在issue上告訴工做人員我release了

    發佈成功

    後續更新
github


1. 註冊賬戶


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

裏邊全部的字段都是必填的,其中email很重要,以後工做人員和你溝通都是經過該郵箱進行的。服務器



2. 建立一個 Issue


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


這裏須要特別說明的是Group Id,若是你是託管在Github或者Git@OSC 可使用com.github.XXX或者net.oschina.XXX,我以前註冊了個本身的域名com.qiaoguanhua,因此在此能夠填寫這個group(我實際發佈的是com.github.935237604),剩下的能夠依照實際狀況填寫,例如託管的地址等等(託管地址等信息會在用去去maven倉庫搜索的時候顯示,用來幫助用戶找到你的項目地址尋求幫助)。另外此處填寫的group id必須和你要發佈的組件的pom中的group id同樣,必須同樣!!!
jsp


3. 等待Issue審批


審批就是等着審覈人員告訴你審覈是否經過,若是不經過審覈人員會告訴你不經過的緣由,例如當你用的是本身的域名時(不是github)審覈人員會詢問你域名是不是你的,回覆一下就行,而後工做人員就會給出下圖的回覆:maven

這個是工做人員告訴我已經經過了,能夠去下面那個地址發佈(前兩個地址),發佈後去下面後兩個地址搜索。ui



4. 使用 GPG 生成密鑰對


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


(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.後續更新


後續若是你的構建更新了只需重複第7、八步從新上傳便可,不須要再通知工做人員了。


11.注意事項


構件發佈成功後並不能第一時間在maven倉庫搜索到,有必定延遲(我第一次發佈時覺得發佈失敗了,反覆詢問工做人員才知道有延遲,並且這個延遲時間很長........大坑啊.....),能夠先去

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

搜索(根據group id一層一層搜索),而後等待一段時間等待maven中央倉庫同步,就能夠在maven中央倉庫搜索到了。


若是在發佈過程當中有任何疑問請加Q1213812243。

本文分享自微信公衆號 - java初學者(JoeKerouac_public)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索