目录 [−]
最近准备将新开发的一个项目fastjson-jaxrs-json-provider发布的Maven central repository中(sonatype respository), 这样其它人可以方便的下载编译好的库使用。 具体步骤可以参考官方文档。
搜索了一下,发现阿里的王福强的一篇文档介绍的很详细,特此转载记录以下。
原文地址: 发布开源项目到Maven Central
过程比较繁琐曲折,其实按照官方文档一步一步做,大部分情况下是可以搞定的, 不过,为了方便后面查阅,简单整理为此文档。
总体路线概述
直接发布到central repo其实是不行的,所以,其实我们是发布到sonatype的repository, 然后sonatype的repository会定期把我们的artifacts同步到maven的central repo中。
基本上,如果我们的项目是第一次发布到sonatype,那么需要申请一个账号,并提交New Project的Ticket等待审批,审批之后,就可以开始准备发布项目所需的各项要求了。当然,因为Ticket审批需要2个工作日,那么,其实可以在这段时间就把准备工作做掉。
初次发布,POM文件需要规范为sonatype要求的格式,该添加的element还是要添加一下,另外, 因为需要对要发布的artifacts做签名,也需要安装一下GnuPGP,并将public key上传到指定的key server上去(hkp://pool.sks-keyservers.net), 并在.m2/settings.xml中添加相应的passphrase配置。
所有这些事儿搞定之后,就可以执行命令开始发布, 总体流程大体如此。
申请账号并提交Ticket
这一步没啥难度,参考官方文档的说明即可:
- 到https://issues.sonatype.org/申请账号
- 到通过'+Create Issue'创建新的Ticket, 类型为New Project, 其它信息按照人家要求填写就行了
Ticket提交完了就等着就好了,人家说了要2个工作日才能审批完成,运气好估计会快点儿吧, 偶第一次因为SB网速,提交了2个相同的Ticket...
规范POM
这些element人家说了,必须要:
|
|
另外, 除了二进制jar包,相对应的-sources.jar和-javadoc.jar也是必须的,所有这些jar以及pom.xml都需要通过PGP签名,所以,我们需要在pom.xml里添加相应的maven插件来帮助我们搞定这些:
|
|
我们不想任何时候都做pgp签名,这样会比较耗费时间,一般只是在发布的时候才执行pgp前面,所以,我们将maven的pgp插件放入pom.xml里单独的一个profile中:
|
|
除此之外, 我们的pom应该继承自sonatype oss:
|
|
并且,有关SCM的信息需要严格填写, maven将在发布的时候自动checkout并打标发布。
配置PGP
如果发布机上没有安装,需要安装一下, 俺本地因为是mac,所以直接下了pgptools,一键安装, very easy~
安装后,创建一个pgp key,并发布到指定的key server - hkp://pool.sks-keyservers.net
, 因为pgptools默认是发布到gnu的key server,所以,需要在PGP Keychain Access.app的Preferences里将key server选择为hkp://pool.sks-keyservers.net
所有这些搞定之后,在~/.m2/settings.xml中添加:
|
|
用户名和密码在一开始已经申请过了,填上即可。
更详细步骤参看 https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
发布SNAPSHOT版本
|
|
发布Staging版本
|
|
期间会提示需要输入pgp key的passphrase,照办就是了。
哥的Ticket当天没批下来,所以,运行会告诉我没有权限上传artifacts:
|
|
没办法,等吧~
正式发布
访问web地址: https://oss.sonatype.org/
登陆, 选择左边栏里的"Staging Repositories", 然后点Close按钮,sonatype会做响应的validation,通过的话,就可以点Release发布啦,如果不通过,或者人工检查有问题,就先Drop,并重新做Staging发布, 知道搞定之后,再行发布。 没Release之前随便搞, Release之后就板上钉钉了。
总结
第一次搞需要拢的东西比较多,而且很久没搞Maven了(俺现在搞SBT比较多,u know的), 所以,搞的期间偶尔出点儿小问题刺挠刺挠我,都是小事儿,总体上来讲, 官方文档还是比较靠谱的。
参考资料
- 官方文档
- http://datumedge.blogspot.com/2012/05/publishing-from-github-to-maven-central.html
- https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
第一次发布有些周折, 请参看另外一篇文章: 上传Android或Java库到Maven central repository:
前面的步骤都一样, 下面转载后面几个章节。
编译上传
(1) 发布一个snapshot版本发布一个snapshot版本
mvn clean deploy
发布完成后登陆https://oss.sonatype.org (https://issues.sonatype.org/ 上的用户名和密码),通过下图步骤找到自己的Artifact(上传的jar或aar或pom等)
(2) 发布一个release版本
mvn release:clean release:prepare release:perform
过程中需要通过GPG签名,需要输入上面的passphase。发布完成后我们依然可以通过类似上图步骤找到我们的Artifact
其他上传方式见Stage a Release
正式发布
这里的正式发布是指同步到Maven主仓库使得其他人可以使用。主要包括Close和Release两步,先Close后Release,分别如下图
其他不明白可以查看:Release
需要注意
(1) 在release时可能会出现
|
|
的403弹窗,这可能是因为在2中创建的JIRA ticket,状态还没有变为 resolved
,等待可用即可。如果上面截图中你的Repository列表中Profile列的值不是你在创建JIRA ticket时的Group Id需要重新提交。
(2) 如果是第一次release,需要到之前你的JIRA ticket下,评论下告诉他们,你已经release了,需要同步下,我的JIRA ticket: OSSRH-9800. 如下图:
另一篇:
将项目发布到Maven中央库
如果发布时出现401认证错误,检查settings.xml文件中是否为oss的仓库设置了用户名和密码:http://stackoverflow.com/questions/24830610/why-am-i-getting-a-401-unauthorized-error-in-maven
我的经验:以后发布只需
$ mvn release:clean
$ mvn release:prepare
$ mvn release:perform
然后在https://oss.sonatype.org上点击close,release就发布新的版本了
好久没发布新的库到中央仓库了,工作机也换了,发布rpcx-java的过程中一波三折,问题记录下来。
- 如果
groupid
是你的域名,你需要证明这个域名由你控制,否则发布不了。证明办法是这个域名的一个地址转向你的项目,或者用这个域名的邮件给`central@sonatype.com`发封信 - pom.xml文件的相关项目也齐备,我是因为
developers
节点没写第一次发布不了 - maven setting.xml中的resposity的oss的用户名和密码要填写
- 在windows不成功,gpg插件总是有问题,貌似按照linux的格式实现的,比如找gpg工具,然而windows中的工具名是
gpg.exe
,最后换到linux机器上才发布成功 - 在新的机器上创建gpg,首先
gpg --import private.key
,这个时候尝试gpg --sign a.txt
,会要你填写密码,填写你的密码。我开始没这么做,结果mvn release:perform的时候死活不显示让我输入gpg的密码。 sign尝试一下后貌似密码就记住了,不用填了