Maven 是 Java 中最常用的依赖管理工具, Maven 的中央仓库保罗万象, 涵盖了各个领域的框架, 工具和文档, 也是 Java 生态强大生命力的体现. 我们自己开发的一些有用有趣的代码也可以通过打包上传到 maven 中央仓库的方式分享给他人, 也为开源社区做了贡献. 本文记录了上传 https://github.com/wxisme/bloomfilter 算法实现代码的大概过程, 如对 bloomfilter 感兴趣请参考: https://github.com/wxisme/bloomfilter
考虑到他人使用的可靠性, 建议在上传之前做全面测试.
提交工单
首先要向 https://issues.sonatype.org/secure/Dashboard.jspa 提交工单, 请求创建一个新的项目, 如果你没有账号可以先注册一个, 记住账户和密码. 登录成功后 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 是用来对代码, 二进制包进行签名校验用的, 使用起来非常简单, 可以通过这篇文章 http://www.ruanyifeng.com/blog/2013/07/gpg.html 了解一下.
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 入门教程 http://www.ruanyifeng.com/blog/2013/07/gpg.html , 注意生成过程中需要输入一个密钥密码, 需要记住.
部署
接下来就可以使用 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
如果执行成功, 接下来就可以执行发布操作:
选中你发布的模块
点击上方的 Close->Confirm
查看 Activity 的状态是否为 Closed, 需要等待
如果状态为 Closed 执行 Release->Confirm, 默认选中成功后自动删除
查看 Activity 状态, 如果被删除了, 说明已经发布成功
发布操作执行完成后, 可以在页面左侧点击 Advanced Search:
此时你能搜到你发布的模块, 说明就已经大功告成:
现在查看一下最初第一步提交的工单:
系统多出一条评论, 意思是发布成功后, 一般 10 分钟内会被发布到 maven 中央仓库, 但要更新到 search.maven.org 需要 2 个小时, 这样的话同步到国内镜像的时间会更久, 你只需要耐心等待, 然后再做一些必要的测试就好了. 至于你发布成功后要不要通过评论告诉工作人员, 那就看你心情吧:)
参考资料
如何发布 jar 包到 maven 中央仓库 https://blog.csdn.net/tiger435/article/details/50470316
GPG 入门教程 http://www.ruanyifeng.com/blog/2013/07/gpg.html
来源: https://www.cnblogs.com/wxisme/p/8728008.html