將項目發佈到Maven中央倉庫

先前都是配置pom.xml從Maven中央倉庫下載依賴包,幻想着哪一天咱也有個包可讓別人自動下載啊,好高大上的感受。html

現已成功利用Sonatype OSSRH將fuzhutech-ueditor提交給Maven的中央倉庫。特發表此文以作記念。對於我這樣的新手而言,第一次發佈項目到中央倉庫,真不是一件容易的事情,因此頗有必要整理步驟並說明一下在發佈過程當中遇到的一些問題。java

1、註冊帳號

官方網站:http://www.sonatype.org/git

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

註冊後將信息保存到maven的conf/settings.xml中服務器

<servers>
    <server>
        <id>oss</id>
        <username>用戶名</username>
        <password>密碼</password>
    </server>
</servers>

2、建立工程單

建立地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134,或者點擊首頁的中上部「Create」按鈕。dom

該步驟字面意思就是Create 一個 issue,咱們要New 一個 Project(提出一個發佈申請)。實質就是申請並佔有座標Group Id。個人Issue,https://issues.sonatype.org/browse/OSSRH-31467,參考說明各項字段內容:jsp

  • Project:Community Support - Open Source Project Repository Hosting (OSSRH)
  • Issue Type:New Project
  • Summary:add a new project to the repository
    備註:隨意寫便可,仔細觀察發現你們寫的啥都有
  • Description:Various open source project,fuzhutech.com is my own domain.thank you!
    備註:可不填,有的聲明own domain,但系統仍是會讓你確認是否擁有。
  • Group Id:com.fuzhutech
    備註:比較關鍵,系統會推薦是否選擇com.github.fuzhutech
  • Project URL: https://github.com/fuzhutech/fuzhutech-ueditor
    備註:項目的站點,據實填寫便可
  • SCM url:https://github.com/fuzhutech/fuzhutech-ueditor.git
    備註:據實填寫,後續pom配置中也會用到

其餘的就沒有什麼了,提交以後就等工做人員離開確認吧,有時候工做人員會問你些你沒有明確的內容,只須要回答就好。maven

大概30分鐘,系統自動回覆網站

Do you own the domain fuzhutech.com? If not, please read:
http://central.sonatype.org/pages/choosing-your-coordinates.html You
may also choose a groupId that reflects your project hosting, in this
case, something like io.github.fuzhutech or com.github.fuzhutech

我提交了,提交一條Commentui

Yes, we own the domain fuzhutech.com.

次日收到回覆,審批初步經過了。

Configuration has been prepared, ......

3、上傳前的準備

在等待Issue的過程當中,須要準備GPG以便對發佈的文件進行簽名。小編直接在http://www.gpg4win.org/downlo... 下載Gpg4win-Vanilla版來使用。

1. 查看是否安裝成功

gpg --version
可以顯示 GPG 的版本信息,說明安裝成功了。

2. 生成密鑰對

gpg --gen-key
此時須要輸入realName、Email、Comment等字段,其它字段可以使用默認值,此外,還須要輸入一個 Passphase,至關於一個密鑰庫的密碼,最好記下來,由於後面會用到。

3. 查看公鑰

gpg --list-keys
輸出以下信息:

pub   2048R/DEF22C2D 2017-05-23
uid       [ultimate] fuzhutech (fuzhutech) <fuzhutech@163.com>
sub   2048R/A8C6E2E2 2017-05-23

這裏的公鑰的 ID 是:DEF22C2D。

4. 將公鑰發佈到 PGP 密鑰服務器

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys DEF22C2D
此後,可以使用本地的私鑰來對上傳構件進行數字簽名,而下載該構件的用戶可經過上傳的公鑰來驗證簽名,也就是說,你們能夠驗證這個構件是否由本人上傳的,由於有可能該構件被壞人給篡改了。

5. 查詢公鑰是否發佈成功

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys DEF22C2D
key server上經過公鑰 ID 來接收公鑰,此外,也能夠到sks-keyservers.net上經過公鑰 ID 去查詢。後續OSS進行簽名驗證成功的前提就是公鑰發佈成功。

6. 在settings.xml中配置gpg的簽名

<profiles>
    <profile>
        <id>ossrh</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!--gpg.keyname>DEF22C2D</gpg.keyname-->
          <gpg.executable>gpg2</gpg.executable>
          <gpg.passphrase>the_pass_phrase</gpg.passphrase>
        </properties>
     </profile>
</profiles>
<activeProfiles>
    <activeProfile>ossrh</activeProfile>
</activeProfiles>

the_pass_phrase配置的是生成密鑰對時輸入的Passphase

4、配置pom.xml

pom.xml在Maven中央庫的審覈比較嚴格,必須有固定的一些字段,包括:name、description、url、licenses、developers、scm 等基本信息。

具體這個文件我就不貼了,請查看個人pom作參考:https://github.com/fuzhutech/...

distributionManagement則是定義了releasesnapshot發佈的地址,這個在Issue經過審覈後工做人員會給你,還有就是snapshotRepositoryrepository 中的 id 必定要與 setting.xmlserverid 保持一致。

由於這些執行一般都獨立於標準構建流程,因此把他們移動到一個profile,發佈須要的source插件、javadoc插件、gpg插件都在這個profile裏,這樣只有在發佈的時候纔會生成源碼包、文檔API包和作gpg簽名。

5、上傳到OSS

待項目編寫完成,就能夠進行上傳、發佈了。在命令行進入項目pom.xml所在路徑,執行命令提交到OSS服務器。

1.提交一個snapshot版本,修改version加一個-SNAPSHOT:

mvn clean deploy

2.發佈一個release版本,修改version 不要加-SNAPSHOT

mvn clean deploy -P release
能夠手動修改,也能夠執行
mvn versions:set -DnewVersion=1.0.0

注意:此時上傳的構件並未正式發佈到中央倉庫中,只是部署到 OSS 中了,下面纔是真正的發佈。

6、在OSS中發佈

上傳成功後須要在OSS系統中對操做進行確認,登陸https://oss.sonatype.org/,在左邊菜單找到「Staging Repositories」,點擊,在右邊上面一點有一個輸入搜索框輸入你的groupid進行快速定位,能夠發現這時你的構件狀態是「open」,勾選你的構件,查看校驗的結果信息,若是沒有錯誤就能夠點擊剛纔勾選的checkbox上面右邊一點的「close」按鈕,在彈出框中「confirm」

接下來系統會自動驗證有效性,若是你的Group Idpom.xml沒有錯誤,狀態會自動變成closed,若是有問題,會在下面提示你那裏有問題,加入有問題你能夠點擊drop按鈕刪掉這個構件,修改後從新執行步驟五。

成功後狀態會變爲「closed」,點擊release按鈕發佈。

7、通知sonatype首次發佈

回到issue系統,找到你的那個申請的issue,寫個comment,I promoted my first release, thanks,說明首次發佈完成了,等待他們審覈。

審覈經過後咱們就能夠在中央庫搜索到咱們的GroupId!搜索的地址是: http://search.maven.org/

8、感謝

成功的發佈離不開各個前臺帖子的指導,雖然我沒有按照帖子一步成功,但我但願能夠幫助一些人少走一些彎路,小白不易,且行且珍惜。

相關文章
相關標籤/搜索