前提說明:
我自己在GitHub上有個JAVA library專案,想要發佈到Maven Central,從完全不知道如何開始到上架maven完成,因此撰寫這篇做記錄提供教學,使用的電腦環境是MacOS。
流程大綱 :
2, 下戴GPG並建立個人公、私鑰,因上傳到Maven Central所有檔案只允許用GPG rsa加密過的檔案上傳。
3. 調整Java專案裡build.gradle Maven發佈設定。
4. 在terminal command line下指令執行,並上傳相關檔到Nexus Repository Manager(發佈前暫存管理網站),再到Nexus Repository Manager網站再次確認後進行發佈後需要等待約2小時。
5. 到Maven Central Repository Search網站搜尋自己的專案名稱。
完整流程說明:
1.申請Sonatype帳號,讓GitHub帳號取得發佈到maven的Group ID
(1)在GitHub上有個專案,我的專案8ComicSDK-JAVA(2)到Sonatype Jira註冊,首頁紅圈處是註冊入口
(3)註冊Sonatype帳號後進行登入後,按下上面工具列Create按鈕
(4)出現資料填寫頁面
欄位填寫說明 :
Project : 要發佈library到社群就選Community Support
Issue Type : 選New Project,如字面
Description : 似乎可不寫,我是有用英文簡單填寫說明
Group Id : 填寫你library存放空間,以GitHub格式固定為 io.github.使用者名稱
Project URL : Git專案存放網址
SCM url : Git專案可被直接用git下戴的連結,即網址最後是.git
Already Synced to Central : 是否目前專案有曾經同步到maven過,我選None
欄位填寫範例 :
Project : 選擇「Community Support - Open Source Project Repository Hosting (OSSRH)」
Issue Type : 選擇「New Project」
Description : This library supports comic watch and download.
Group Id : io.github.raytw
Project URL : https://github.com/RayTW/8ComicSDK-JAVA
SCM url : https://github.com/RayTW/8ComicSDK-JAVA.git
Already Synced to Central : None
最後按下下面Create按鈕即可建立issue
(5)建立issue後,Sonatype官方人員會留言要驗證步驟4提供的GitHub帳號擁有者是你自己,因此會要求你用issue編號在GitHub創建一個公開的Repository,去GitHub創建後記得用官方人員留言裡的連結點看看是否可以連結到驗證的GitHub專案
官方人員要求我在GitHub建立https://github.com/raytw/OSSRH-70157
我在GitHub創建專案名OSSRH-70157,這專案驗證後可以刪除
留言回覆官方人員已建立專案,此時就可以進行下一階段了
2.GPG安裝與使用
(1) 下戴GPG並安裝到GPG網站下戴並安裝或是在Terminal command line執行「brew install gnupg」,這裡我下戴了2.3.1版本,但我個人建議安裝LTS版本網站上GPG版本列表,上圖紅框處是我安裝的版本
安裝後下指令查看版本「gpg --version」
(2.1)建立個人公、私鑰
打開Terminal在command line執行「gpg --full-generate-key」,後續會有幾個問題要填
請選擇你要使用的金鑰種類:
(1) RSA and RSA
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(9) ECC (sign and encrypt) *default*
(10) ECC (僅能用於簽署)
(14) Existing key from card
這裡是選擇(1)RSA即可
RSA 金鑰的長度可能介於 1024 位元和 4096 位元之間.
你想要用多大的金鑰尺寸? (3072) 長度越長越安全,這裡填入3072
你所要求的金鑰尺寸是 3072 位元
請指定這把金鑰的有效期限是多久.
0 = 金鑰不會過期
<n> = 金鑰在 n 天後會到期
<n>w = 金鑰在 n 週後會到期
<n>m = 金鑰在 n 月後會到期
<n>y = 金鑰在 n 年後會到期
金鑰的有效期限是多久? (0) 2y 這裡選2年,你可自己決定時間,到期後再要做展期處理
金鑰將會在 六 6/17 15:51:34 2023 CST 到期
以上正確嗎? (y/N) y
GnuPG 需要建構使用者 ID 以識別你的金鑰.
真實姓名: Ray Li
電子郵件地址: ray00000sina@gmail.com
註釋:
你選擇了這個使用者 ID:
"Ray Li <ray00000sina@gmail.com>"
這裡是最後確認資料是否都正確,確認無誤後輸入英文字母o即可
變更姓名(N), 註釋(C), 電子郵件地址(E)或確定(O)/退出(Q)? o
(2.2) 公鑰上傳將個人公鑰上傳到第三方金鑰倉庫存放,提供他人進行驗證未來你自己用私鑰加密的任何檔案名件.
打開terminal在command line執行「gpg --list-secret-keys --keyid-format SHORT」取得紅框處金鑰短碼
執行上傳公鑰操作,下列二選一
「gpg --keyserver keyserver.ubuntu.com --send-keys B57DDABC」(主要、較穩) 或
「gpg --keyserver hkps.pool.sks-keyservers.net --send-keys B57DDABC」
上傳公鑰之後,可以到 https://keyserver.ubuntu.com/ 用e-mail查詢公鑰是否上傳成功,如下圖 : (圖片我實際上傳的公鑰,文章內是範例並未上傳)
(2.3) 輸出私鑰,後續用gradle打包jar檔時會讀取私鑰進行簽名打開terminal在command line執行「gpg --export-secret-keys B57DDABC > secring.gpg」
上述操作是將私鑰存成檔案secring.gpg,再將「secring.gpg」檔案放到「/Users/使用者名稱/.gradle」,放到「/Users/ray/.gradle」(ray是我的電腦使用者名稱)
(3)java專案「build.gradle」設定
這部份我參考Maven Publish Plugin(Example 8. Publishing a Java library)與Sonatype publish gradle
幾個重點要注意:
- pom區塊資料要填,我在實作過程漏寫url而在最後要release時送審被退件。
- java程式原碼部份要JDoc的格式要完整,有缺漏也會在編譯時失敗。
- 在本機路徑「/Users/ray/.gradle」存放金鑰密碼與Sonatype帳密設定檔「gradle.properties」,這文字檔要自己建立,內容如下圖。
build.gradle範例:(完整範例連結)
(4).發佈上傳檔案到Nexus Repository Manager
接續build.gradle設定完成後,請打開terminal:/
(4.1)切換路徑到專案路徑底下,以我電腦為範例路徑是「/Users/ray/Documents/workspace-2021/8ComicSDK-JAVA」
(4.2)在command line執行「./gradlew publish --stacktrace -info」,過程有錯就除吧,直到執行成功。
(4.3)登入Nexus Repository Manager查詢是否上傳成功。
在畫面左邊點選「Staging Repositories」,下圖紅框處
點擊後會出現剛剛上傳的暫存檔(此處我拿官方範例圖示範),點取專案(編號從1000開始),點按上方的「close」按鈕進行發佈審核,若審核通過後即可再按右邊的「release」進行發佈
圖片取自官方,因為我的專案發佈後暫存檔就會自動清除而沒留到圖片
按下「release」後可回到Snotype網站查看Issue,官方人員會留言(下圖紅框處)請你等待2小時左右後即可確認是否發佈到Maven Central
5. 到Maven Central Repository Search網站確認是否發佈成功(約2個小時)
到Maven Central Repository Search搜尋「8comicSDK」查看結果
MVNRepository網站也查詢得到(官方較晚同步更新)
到此就全部完成了,有任何問題我也附上參考的相關資料。
參考資料:
Maven Publish Plugin
Maven Publish Plugin
留言
張貼留言