背景
修改了某个开源库的代码,以适应自己的项目情况。之前是临时发布到 github
静态页面去的,现在 github
访问很不稳定,所以需要发布到中央仓库。
注册帐号
入口有点难找,提示一下,在 Build 选项卡里面
https://issues.sonatype.org/secure/Signup!default.jspa
密码设置十分变态,12位,必须包含大小写数字特殊字符,有必要拿小本本记一下。而且最好不要设置在
xml
中需要转义的特殊字符,比如&
,否则后面配置xml
时还要转义!不要问我为啥知道的。。
Jira申请
点击新建按钮,提一个 issue
,只有申请通过了才有可能上传到中央仓库上,一般 5 分钟左右会有回应,我昨晚 10 点左右申请的,不知道是不是时差问题他们回应比较快:
有几个比较重要的地方说明:
1.问题类型一般选 New Project
2.Group Id
的几点要求
- 如果是域名的话需要提供证明,或者把你的域名暂时重定向到你的
github
主页,这样可以验证,比较麻烦 - 会推荐使用
io.github.xxx
(xxx 是你的 github 账户名) -
com.github.xxx
不能用了 -
xxx
还需要跟下面的Project URL
中的账户名对应,比如我这里账户名是linceln
,那么如果我的Group Id
设置为io.github.lince
也会审核不通过
上传
https://central.sonatype.org/publish/publish-maven/
我这次是上传到 Apache Maven
,所以接下来的步骤都是参考以上链接做的,从晚上 9 点一直试到夜里 1 点才搞定,中间踩坑经历稍后会记录一下。
Nexus Staging Maven plugin
配置部署到 OSSRH Nexus Repository Manager
的插件,在 pom.xml
中配置插件:
org.sonatype.plugins
nexus-staging-maven-plugin
1.6.7
true
ossrh
https://s01.oss.sonatype.org/
true
此处照抄,所有东西不要去动它,比如 serverId
。
然后添加仓库管理,id
也不要去改动:
ossrh
https://s01.oss.sonatype.org/content/repositories/snapshots
ossrh
https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
setting.xml
配置 server,注意,这里的 id
和上面配置的 nexus-staging-maven-plugin
和 distributionManagement
的 id
保持一致,然后填入帐号密码:
ossrh
linceln
xxxxxxxxxxx
Javadoc and Sources
插件
JavaDoc
是必须的,因为这个生成时间很长,有的项目会选择打包时跳过 JavaDoc
,但是这样最后会导致可以上传到 sonatype.org
,但是无法同步到中央仓库,白忙活一场。
org.apache.maven.plugins
maven-source-plugin
2.2.1
attach-sources
jar-no-fork
org.apache.maven.plugins
maven-javadoc-plugin
2.9.1
attach-javadocs
jar
GPG
签名组件
org.apache.maven.plugins
maven-gpg-plugin
1.5
sign-artifacts
verify
sign
本地还要先有个 GPG
签名,Windows
版本这里下载:
https://www.gpg4win.org/get-gpg4win.html
安装完生成秘钥就好。
有一步比较关键的是要把公钥上传到公共服务器上,这样我们在上传Jar
包等文件时对方可以从公共服务器上下载到并且验证你加密过的文件:
# 给公共服务器上传公钥
$ gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys
# 验证对方是否接收
$ gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys
打包部署
$ mvn clean deploy -DskipTests
部署成功:
闭坑指南
1. 注意部署的地址变了,看很多之前的教程还是用 https://oss.sonatype.org
这个地址,然后上传就报 403。
2. 401 Unauthorized
这个基本都是帐号密码的问题,检查一下帐号密码是否填对了。另外注意 setting.xml
配置的
标签,id
是否和 nexus-staging-maven-plugin
和 distributionManagement
配置的 id
一致:
ossrh
linceln
xxxxxxxxxx
3. 有的教程会教你使用 org.sonatype.oss:oss-parent:7
这样的配置,这样你就完全不用配置了,但是官方已经标记这个方法不推荐使用了,默认还是上传到 https://oss.sonatype.org
,报 403。
org.sonatype.oss
oss-parent
7
————————————————
版权声明:本文为CSDN博主「VF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tiger435/article/details/50470316
4. 记得生成 JavaDoc
和 gpg
签名,否则虽然可以上传,但是在 https://oss.sonatype.org/#stagingRepositories
close
时报错,无法同步到中央仓库,还要重新来过。
5. 以前上传完还需要手动 close
和 release
,现在 Nexus Staging Maven Plugin
插件可以配置自动执行这个过程。
回到https://oss.sonatype.org/#stagingRepositories,选中刚才发布的构件,并点击上方的close–>Confirm,在下边的Activity选项卡中查看状态,当状态变成closed后,执行Release–>Confirm,并在下边的Activity选项卡中查看状态,成功后构件自动删除,一小段时间(约1-2个小时)后即可同步到maven的中央仓库。
————————————————
版权声明:本文为CSDN博主「VF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tiger435/article/details/50470316
注意,如果没有
JavaDoc
或者GPG
签名,这一步无法完成,就会报错。
https://mvnrepository.com/