记一次向maven中央仓库提交依赖包
Maven是Java中最常用的依赖管理工具,Maven的中央仓库保罗万象,涵盖了各个领域的框架、工具和文档,也是Java生态强大生命力的体现。我们自己开发的一些有用有趣的代码也可以通过打包上传到maven中央仓库的方式分享给他人,也为开源社区做了贡献。本文记录了上传bloomfilter算法实现代码的大概过程,如对bloomfilter感兴趣请参考:https://github.com/wxisme/bloomfilter
考虑到他人使用的可靠性,建议在上传之前做全面测试。
提交工单
首先要向sonatype提交工单,请求创建一个新的项目,如果你没有账号可以先注册一个,记住账户和密码。登录成功后Create
Project:Community Support - Open Source Project Repository Hosting
Issue Type:New Project
Summary:bloomfilter
Group Id:com.github.wxisme
Project URL:https://github.com/wxisme/bloomfilter
SCM url:https://github.com/wxisme/bloomfilter.git
Already Synced to Central:默认no
其他内容可以不用填写,提交后等待工作人员review,如果提供的信息没有问题的话,很快(美国工作时间里的几分钟)状态就会由open变为resolved
页面下面会有一条评论提供了许多接下来操作的信息,可以参考,注意最后一句。如果你已经接下来已经发布成功,可以添加评论和工作人员说明。
Maven相关配置
在你要发布的工程的pom文件里引入oss-parent父依赖,可以省去一些发布配置:
<parent> <groupId>org.sonatype.oss</groupId> <artifactId>oss-parent</artifactId> <version>7</version> </parent>
接着在pom中完善license、scm、developer的信息:
<licenses> <license> <name>GNU Lesser General Public License Version 3</name> <url>http://www.gnu.org/licenses/lgpl.txt</url> <distribution>repo</distribution> </license> </licenses> <scm> <tag>master</tag> <url>https://github.com/wxisme/bloomfilter.git</url> <connection>scm:git:https://github.com/wxisme/bloomfilter.git</connection> <developerConnection>scm:git:https://github.com/wxisme/bloomfilter.git</developerConnection> </scm> <developers> <developer> <name>Wang Xu</name> <email>xxx@xxx.com</email> <organization>xxx</organization> </developer> </developers>
然后打开Maven的settings.xml配置文件,配置sonatype账号信息,注意别加错地方:
<servers> <server> <id>sonatype-nexus-snapshots</id> <username>Sonatype 账号</username> <password>Sonatype 密码</password> </server> <server> <id>sonatype-nexus-staging</id> <username>Sonatype 账号</username> <password>Sonatype 密码</password> </server> </servers>
配置gpg-key
gpg-key是用来对代码、二进制包进行签名校验用的,使用起来非常简单,可以通过这篇文章了解一下。
windows系统可以通过https://www.gpg4win.org/download.html下载安装,mac和linux可以直接通过命令安装,例如mac安装命令:
brew install gpg
Linux安装命令:
# Debian / Ubuntu 环境 sudo apt-get install gnupg # Fedora / CentOS环境 yum install gnupg
安装好后就可以开始生成私钥和公钥了,命令行执行:
gpg --gen-key
之后每一步会有提示,如果你不了解可以全部默认,也可以参考GPG入门教程,注意生成过程中需要输入一个密钥密码,需要记住。
部署
接下来就可以使用maven来部署,首先确保你的代码可以通过测试,能够打包成功,密钥密码是上一步中你输入的密码:
mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=密钥密码"
如果执行失败,并且报错如下:
gpg: 签名时失败: Inappropriate ioctl for device gpg: signing failed: Inappropriate ioctl for device
这说明你安装的gpg版本较新,需要额外配置,在gpg安装目录(mac的是~/.gnup)下建立两个配置文件:gpg.conf、gpg-agent.conf,
然后在gpg.conf添加:
use-agent
pinentry-mode loopback
在gpg-agent.conf下添加:
allow-loopback-pinentry
保存后再次执行上面的deploy命令,如果还有报错,通常情况下是你上面maven配置出了问题,检查maven配置是否有语法错误,配置的账号和密码等有无需要转义的特殊字符。还需要注意的是生成密钥和执行部署命令的必须是同一台机器。
发布
如果以上步骤都没有问题,现在构件仓库中应该有你刚才部署的构件,访问https://oss.sonatype.org/#stagingRepositories查看,一般情况下是最后一个,此时的状态应为open。现在就可以发布了,首先把上面生成的公钥上传到第三方key服务器,执行如下命令:
gpg --list-keys pub 2048R/824B4D7A 2019-01-06 uid [ultimate] xxx <xxx@xxx.com> sub 2048R/7A10AD69 2019-01-06
公钥是824B4D7A,可能格式不同,可能更长,将公钥复制下来,执行如下命令:
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 824B4D7A
如果执行成功,接下来就可以执行发布操作:
1.选中你发布的模块 2.点击上方的Close->Confirm 3.查看Activity的状态是否为Closed,需要等待 4.如果状态为Closed执行Release->Confirm,默认选中成功后自动删除 5.查看Activity状态,如果被删除了,说明已经发布成功
发布操作执行完成后,可以在页面左侧点击Advanced Search:
此时你能搜到你发布的模块,说明就已经大功告成:
现在查看一下最初第一步提交的工单:
系统多出一条评论,意思是发布成功后,一般10分钟内会被发布到maven中央仓库,但要更新到search.maven.org需要2个小时,这样的话同步到国内镜像的时间会更久,你只需要耐心等待,然后再做一些必要的测试就好了。至于你发布成功后要不要通过评论告诉工作人员,那就看你心情吧:)