你需要:
- 一個使用 Maven 管理的 Java project(廢話)
- 一個 GPG key(deploy 的時候會用來 sign 要提交的 .jar)
- 一個 Sonatype JIRA 的帳號
- 開一張 JIRA 的 ticket 告訴 Sonatype 的人你要發佈 library,告知他們你的 groupId
- 按照 Requirements 的指示完善你的 pom.xml
- deploy 到 snapshot repository
- deploy 到 staging repository
- 在 OSSRH 的 Staging Repositories 把你剛剛 deploy 的 library 給 close 掉,這樣才算是 release
- 回到那張 ticket,通知 Sonatype 讓他們把你的 library 同步到 Maven Central Repositir
最後一個步驟只有第一次 release 的時候才需要
之後 release 就會自動同步了
Requirements
http://maven.apache.org/guides/mini/guide-central-repository-upload.html
http://central.sonatype.org/pages/requirements.html
http://central.sonatype.org/pages/ossrh-guide.html
http://central.sonatype.org/pages/apache-maven.html
http://central.sonatype.org/pages/releasing-the-deployment.html
參考 Pangu.java 的 pom.xml
https://github.com/vinta/pangu.java/blob/master/pom.xml
Deployment
You need following plugins:
- maven-source-plugin
- maven-javadoc-plugin
- maven-gpg-plugin
- nexus-staging-maven-plugin
- maven-release-plugin
deploy 之前
必須確定你的 local 的程式碼跟 scm 的程式碼是同步的
如果你要發布 1.0.0
版本的話
你的 pom.xml 裡要寫 1.0.0-SNAPSHOT
然後執行:
# deploy to snapshot repository
$ mvn clean deploy
你可以在 https://oss.sonatype.org/ 搜尋到
SNAPSHOT 版本測試都沒問題之後(當然你要先設定讓 Maven 能夠下載 SNAPSHOT 版本的 libraries)
就可以正式 release 了:
# cleanup for the release
$ mvn release:clean
# 要回答一些關於版本號的問題
# 它會自動幫你新增一個 tag 並且把 pom.xml 裡的 `<version>` 改成下個版本
$ mvn release:prepare
# deploy to staging repository
# 然後 Maven 會把上一步新增的 git tag 和 pom.xml 的變更直接 push 到 GitHub
$ mvn release:perform
Maven 會自動在 library 進到 staging repository 的時候把 -SNAPSHOT
字串拿掉
(第一次 release 才需要以下的動作)
然後你就可以在 https://oss.sonatype.org/#stagingRepositories
找到你剛剛 deploy 的 library
通常長得像是 wsvinta-1000
(前面是 groupId)
要把它 close
然後再 release
除了第一次 release 要去 ticket 留言之外
之後 release 就會自動同步到 Maven Central Repository
不過通常會需要等一陣子才會在 Maven 上看到
ref:
http://dev.solita.fi/2014/10/22/publishing-to-maven-central-repository.html
http://lkrnac.net/blog/2014/03/deploy-to-maven-central/
http://kirang89.github.io/blog/2013/01/20/uploading-your-jar-to-maven-central/
http://superwang.me/2014/03/22/publish-your-library-to-maven-central-repository-part-1/
http://www.kongch.com/2013/05/deploy-to-central-repo/
如果你在 release 的過程中出了錯
要重新 release 的話
你得 revert 你的 git commit 到執行 mvn release:prepare
之前
然後再重新跑一次