一句话概括:把托管在github上的代码发布到sonatype nexus仓库,后者通过自动机制同步到maven中央仓库,可以参考官方的帮助文档:OSSRH Guide
创建sonatype jira账号,创建一个jira issue,如果是groupId是自有域名需要证明,例如增加TXT记录
由于执行maven的deploy phase时,需要将代码推送到sonatype的仓库,因此需要配置用户名和密码,方法就是在.m2/setting.xml里配置server字段,配置内容为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<offline/>
<pluginGroups/>
<servers>
<server>
<id>ossrh</id>
<username>sonatype jira's user name</username>
<password>sonatype jira's password</password>
</server>
</servers>
<mirrors/>
<proxies/>
<profiles>
<profile>
<id>nexus-release</id>
<properties>
<gpg.passphrase>gpg's passphrase</gpg.passphrase>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus-release</activeProfile>
</activeProfiles>
</settings>如上所示,需要配置servers.server节点,至于profiles.profile节点,后面会用到
当执行到maven的
verify
phase时,需要调用maven-gpg-plugin
插件的sign
这个goal,目的是对推送到仓库的所有文件进行签名,而这个goal又会默认调用gpg这个系统命令,因此需要提前安装gpg,如果是在windows,需要下载windows下的gpg4win,安装后生成gpg key:gpg --generate-key
,并将公钥分发到远程服务器:gpg --keyserver hkp://pool.sks-keyservers.net --send-keys B87AC4F5C8D3C23B
,也可以使用gpg4win附带的可视化工具Kleopatra对gpg paire进行备份、生成吊销证书、分发到远程服务器。创建开源项目,并托管到github,保证pom.xml内必备字段都完备,比如:GAV、licenses、developers、scm、issueManagement,如果是非pom打包,还要求有doc的jar包和源码的jar包,因此需要配置:
maven-source-plugin
和maven-javadoc-plugin
插件,详情可以参考sonatype官方文档说明,详情参考的gamedo项目的配置,配置过程中需要注意:- snapshotRepository.id需要保持和setting.xml中的server.id一致,maven通过pom.xml和setting.xml实现配置分离和继承,公共数据配置在pom.xml中,私密数据配置在setting.xml中
- maven-gpg-plugin插件中的
configuration.gpgArguments
内的两个参数的目的是让gpg插件自动输入密码,该配置参考自该链接
进入发布循环流程(参考文档):
开发,开发,开发
发布snapshots版本:
mvn clean deploy -P nexus-release
(需要保证版本号以 -SNAPSHOT 结尾)版本稳定,准备发布release版本,设置新版本:
export newVersion=1.0.0 && mvn versions:set -DnewVersion=${newVersion}
(该操作是去掉 -SNAPSHOT 后缀)发布新版本到nexus:
mvn clean deploy -P nexus-release
,由于nexus-staging-maven-plugin
插件中的autoReleaseAfterClose
设置为false,发布后会驻留在staging库,不会自动同步到release库如果发现版本有问题,可以从staging库删除:
mvn nexus-staging:drop
,当确认无误后,可以发布到release库:mvn nexus-staging:release
,nexus会在十分钟后自动同步到maven中央库,并且会在jira里自动评论:OSSRH-65516。提交新的tag到git中
1
2
3git commit -m "Release ${newVersion}"
git tag ${newVersion}
git push --tags开启下一次版本迭代,修改新的版本号
export newVersion=1.1.0-SNAPSHOT && mvn versions:set -DnewVersion=${newVersion} && git commit -m "new feature version"