1. 程式人生 > >如何釋出自己的專案到中央倉庫

如何釋出自己的專案到中央倉庫

## 1 --- 以前在github發開源專案,都因為懶,從來不構建到中央倉庫。最近因為其他人要用,聯絡我。希望可以發到中央倉庫。我想,不就是mvn deploy嘛,開搞。一圈弄下來,發現真沒那麼簡單。當中遇到了無數的坑,讓我每一次都心裡默默唸到,發個專案,為何如此痛苦。 現將痛苦的過程詳細記錄下來。希望可以幫助到其他小夥伴少踩點坑。 首先,你需要到[sonatype](https://issues.sonatype.org/)這個站點上去註冊一個賬號。這個頁面長這個樣子: ![file](https://img2020.cnblogs.com/other/268224/202007/268224-20200719181719931-1489100925.jpg) 我當時以為我進錯地方了,這不是jira嗎。好吧。看url還是提issue的地方,這和釋出專案有毛的關係... 好吧,點新建,專案選`Community Support - Open Source`,問題型別選`New Project` ![file](https://img2020.cnblogs.com/other/268224/202007/268224-20200719181720358-252192948.jpg) 填就是了。注意的是Group Id這裡要填你自己的擁有的域名,比如com.xxxx,沒有的話,自己去註冊域名去。填好之後就是等待稽核。我搜了下,網上小夥伴說要等待3,5天。 3個小時後,我上去再去看,管理員給我回復了: ![file](https://img2020.cnblogs.com/other/268224/202007/268224-20200719181720694-1882080935.jpg) 大致意思就是要你證明這個域名是屬於你自己的。有2種方法,加一個txt型別的解析到你的域名裡是最快的方法。 我的域名申請在騰訊雲。登陸進去。找到域名解析設定。加進去txt型別的解析。主機記錄填那個jira ticket名字,記錄值是你這個ticket的連結url。 ![file](https://img2020.cnblogs.com/other/268224/202007/268224-20200719181720923-1520156128.jpg) 設定完了後,去回覆管理員。然後繼續等待。 管理員大概很快就回復了我。並通過了驗證。接下來,就要搗鼓專案了。 ## 2 --- 要上傳中央倉庫,你的專案必須要符合一些規範才行。 首先pom檔案是有要求的,在你的專案頂層pom檔案裡一定要有以下標籤: * name * description * url * licenses * developers * issueManagement * scm 照著一個個填,我參考了一個開源專案的pom,例子如下: ```xml ``` 補全了pom的資訊後,還需要補全一些maven外掛,主要有: * maven-source-plugin * maven-site-plugin * maven-javadoc-plugin * maven-gpg-plugin 例子如下: ```xml ``` 當然還需要加上`distributionManagement` ```xml ``` 你的sonatype的使用者名稱和密碼當然不能寫在專案pom裡,你得在maven的`setting.xml`裡新增server ```xml ```

## 3 --- 補全了pom的一些規定資訊和外掛後。可以試下是否可以正確無誤的生成javadoc,在專案根目錄下執行 ``` mvn site ``` 接下去就是無盡的等待,等待從中央倉庫下載各種外掛。這裡最好搭個梯子FQ,速度會快點。我全程用梯子,也等了40分鐘,這時候可以去幹點別的事情。。40分鐘後,終於build成功了: ![file](https://img2020.cnblogs.com/other/268224/202007/268224-20200719181721184-1057701632.jpg) 接下去就是簽名了。想要上傳到倉庫,jar包必須被正確簽名。 用gpg來進行簽名,網上搜了下,windows的使用者可下載gpg4win,我這裡用的是mac,不能用這個軟體。只能自己安裝個命令列gpg工具了 ```shell brew install gpg ``` 安裝成功後,執行命令生成祕鑰對: ```shell gpg --gen-key ``` 根據提示,填寫使用者名稱和郵件地址。然後確認。 我mac上用的是iterm2,確認後一直卡著,提示正在生成位元組。然後等了很久也沒有反應。我一直以為這就是正常現象,已經生成祕鑰對了。只不過命令列不友好,沒有告訴我。。。導致了我後面簽名一直籤不成功。 後來我換了一個ssh工具,electerm,才正確生成。最後是要讓你輸入passphase。以下是正確生成祕鑰對的介面 ![file](https://img2020.cnblogs.com/other/268224/202007/268224-20200719181721450-302071829.jpg) 接下去就是要利用`maven-gpg-plugin`對jar包進行簽名了。在進行之前,需要在`setting.xml`檔案的當前profile里加上 ```xml ``` 然後執行mvn install。 我這裡一直簽名不成功,報以下錯: ![file](https://img2020.cnblogs.com/other/268224/202007/268224-20200719181721763-1589300888.jpg) 網上搜索了下,原來是我本地的gpg工具版本太新了,和maven的外掛版本不匹配。需要在~/.gnupg這個目錄下增加2個配置: > gpg.conf ``` use-agent pinentry-mode loopback ``` > gpg-agent.conf ``` allow-loopback-pinentry ``` 折騰了半天,終於可以mvn install正確執行gpg的jar包簽名了。接下去準備進行激動人心的mvn deploy了。 由於之前已經解決了jar包簽名的問題,deploy過程也是相當的順利。deploy過程中,會把你專案的jar包,加簽資訊,javadoc,javasource等包一併上傳到sonatype伺服器。 deploy好,你就可以在sonatype的staging repo裡看到了,staging repo相當於暫存的狀態,還沒有正式釋出到release倉庫,sonatype需要校驗你上傳jar包的規範性,合法性。 選中你提交的暫存資訊,點close,等一段時間,refresh之後底下會有校驗結果。全部通過後才能點release。底下是我第一次校驗的結果: ![file](https://img2020.cnblogs.com/other/268224/202007/268224-20200719181722012-1359120396.jpg) 可以看到,有2項沒通過,第1項是我pom不規範,原因是我第一次pom提交的時