将Maven项目打包发布到中央仓库
项目配置
groupId 要求
项目的groupId
一般为域名倒置,比如我的网址为wangfeng.pro,groupId
则可以命名为pro.wangfeng
。如果你没有属于自己的域名,则最好使用github相关的groupId
,比如你的项目地址的github路径为https://www.github.com/username/projectName
,那groupId
最好为com.github.username
。groupId
的命名规范关系到在接下来的Sonatype OSSRH审核能否通过。
修改 pom.xml
1 | <!--开源协议--> |
注意将其中与项目相关的路径修改为当前项目的
加入相关插件:
1 | <build> |
修改完以上配置后,将代码同步到github上面。
注册 Sonatype OSSRH
注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
提交一个 ISSUE
登录成功后,进入首页,点击页面上方的 Create 按钮,弹出如下窗口:
Project 选择 Open Source Project Repository Hosting;
Issue Type 选择 New Project;
Summary 可以填你的项目名称;
其它的必填项请参考示例填写,填写完成后点击下方的 Create 按钮提交 ISSUE 。
提交成功后,点击页面上方的 Issue 按钮,可以看到刚刚你提交的 ISSUE :
稍等片刻,你就会审核者的相关评论,询问你填写的groupId
对应的域名是不是属于你的:
然后你需要点击下方的 Comment 按钮回答审核者,向他确认该域名是属于你的:
这个确认过程可能需要你和审核者交流几个来回才能搞定,具体过程可参考笔者的一个ISSUE案例。
当最终审核通过后,你将收到审核者的如下回复:
并且该 ISSUE 的状态将变为RESOLVED
:
至此,你就有权限将该项目发布到maven中央仓库中了。
注意:如果你还有其它的项目也需要发布到中央仓库,并且 groupId 和上面的一样,就不需要再次创建 ISSUE 了;只有在使用新的 groupId 时才需要提交 ISSUE。
gpg安装配置
安装 gpg
由于各个系统版本的 gpg 安装方式不尽相同,这里就不写详细安装方式了。具体步骤可以 google 、百度或者按官网上给的步骤下载安装。
安装完成后在终端或命令行运行以下命令,确认是否安装成功:
1 | gpg --version |
出现类似信息表上安装成功:
1 | gpg (GnuPG) 2.1.21 |
生成密钥对
以 Mac 下操作为例,不同系统的过程可能有所差异
运行命令:
1 | gpg --gen-key |
会让你输入真实姓名:
1 | gpg (GnuPG) 2.1.21; Copyright (C) 2017 Free Software Foundation, Inc. |
输入 你的姓名(至少为5个字符) ,回车
再输入你的电子邮箱 ,回车,出现:
1 | Change (N)ame, (E)mail, or (O)kay/(Q)uit? |
选择 O
回车,出现如下提示:
1 | 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 |
并且提示让你输入密码,输入密码后回车,
稍等片刻就会出现如下生成信息:
图中的CD4809496C405C2F72F62B31052A2DC27A064C14
即为生成的公钥
发布公钥到 GPG 密钥服务器
运行命令:
1 | gpg --keyserver hkp://pool.sks-keyservers.net --send-keys CD4809496C405C2F72F62B31052A2DC27A064C14 |
此操作因为网络原因可能需要等待一定的时间
查询公钥是否发布成功
运行命令
1 | gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys CD4809496C405C2F72F62B31052A2DC27A064C14 |
出现类似以下信息即表示发布成功:
1 | gpg: 密钥 052A2DC27A064C14:“wf2311 <wf2311@163.com>”未改变 |
更多 gpg 命令请参考阮一峰的GPG入门教程
修改 maven 配置文件
在maven的配置文件 settings.xml 中添加以下内容:
1 | <servers> |
打包上传
切换到当前项目路径,运行命令:
1 | mvn -DskipTests clean deploy |
正常情况下,如果运行成功未出错,项目会打包并上传的对应的仓库中:
- 对应快照版本,即版本号以
-SNAPSHOT
结尾的,会立即上传到 https://oss.sonatype.org/content/repositories/snapshots 中,并且可以直接通过 maven 快照仓库引用,但是在 maven 中央仓库中搜索不到。 - 对应正式版本,即版本号不是以
-SNAPSHOT
结尾的,虽然也会上传到 https://oss.sonatype.org/service/local/staging/deploy/maven2/ 中,但还需要我们手动发布一下,才会发布到中央仓库中。
提示: 如果在 Mac 环境下打包是出现 gpg 相关的错误,可以参考 gpg: 签名时失败处理这篇文章来处理
在 OSS 中发布构件
登录
登录 https://oss.sonatype.org,用户名密码与上面 Sonatype 的相同
发布构建
登录成功后会进入如下页面:
点击左侧的 Build Promotion 下的 Staging Repositories,出现:
在搜索输入框输入项目的 groupId,找到并选择你刚刚打包上传的项目。点击上方的 Close 按钮:
再在弹窗中点击 Confirm 按钮,过几秒后再点击上面的 Refresh 按钮进行刷新,就可以看到如下界面:
展开下方 Activity 面板的结果信息,如果出现如上图的信息,即表示构建通过。
再过几秒后再次点击点击上面的 Refresh 按钮进行刷新,就会看到旁边的 Release 按钮变为可操作状态:
最后点击 Release 按钮,出现弹窗:
点击 Confirm 按钮,确认发布构建,至此发布构建的的步骤全部结束。
再等待大概一到两小时的同步时间后,便可以在中央仓库中搜索到你发布的项目了:
修改 README.md 文件
在项目的 README.md 头部 加上 如下格式的内容:
1 | [](https://maven-badges.herokuapp.com/maven-central/<groupId>/<projectName>) |
比如我的这个项目的 gorupId 为 pro.wangfeng,projectName 为 common-lang,则加上:
1 | [](https://maven-badges.herokuapp.com/maven-central/pro.wangfeng/common-lang) |
之后就会出现如下显示:
最后再给出两个在打包时十分有用的 maven 命令:
- 更新父模块到指定版本号:
1 | mvn versions:set -DnewVersion=1.0.1-SNAPSHOT |
- 更新子模块版本到与模块相同:
1 | mvn -N versions:update-child-modules |
参考
如果觉得我的文章对您有帮助,请随意打赏。