0%

Maven项目开源操作指南

  1. 一句话概括:把托管在github上的代码发布到sonatype nexus仓库,后者通过自动机制同步到maven中央仓库,可以参考官方的帮助文档:OSSRH Guide

  2. 创建sonatype jira账号,创建一个jira issue,如果是groupId是自有域名需要证明,例如增加TXT记录

  3. 由于执行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节点,后面会用到

  4. 当执行到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进行备份、生成吊销证书、分发到远程服务器。

  5. 创建开源项目,并托管到github,保证pom.xml内必备字段都完备,比如:GAV、licenses、developers、scm、issueManagement,如果是非pom打包,还要求有doc的jar包和源码的jar包,因此需要配置:maven-source-pluginmaven-javadoc-plugin插件,详情可以参考sonatype官方文档说明,详情参考的gamedo项目的配置,配置过程中需要注意:

    1. snapshotRepository.id需要保持和setting.xml中的server.id一致,maven通过pom.xml和setting.xml实现配置分离和继承,公共数据配置在pom.xml中,私密数据配置在setting.xml中
    2. maven-gpg-plugin插件中的configuration.gpgArguments内的两个参数的目的是让gpg插件自动输入密码,该配置参考自该链接
  6. 进入发布循环流程(参考文档):

    1. 开发,开发,开发

    2. 发布snapshots版本:mvn clean deploy -P nexus-release(需要保证版本号以 -SNAPSHOT 结尾)

    3. 版本稳定,准备发布release版本,设置新版本:export newVersion=1.0.0 && mvn versions:set -DnewVersion=${newVersion}(该操作是去掉 -SNAPSHOT 后缀)

    4. 发布新版本到nexus:mvn clean deploy -P nexus-release,由于nexus-staging-maven-plugin插件中的autoReleaseAfterClose设置为false,发布后会驻留在staging库,不会自动同步到release库

    5. 如果发现版本有问题,可以从staging库删除:mvn nexus-staging:drop,当确认无误后,可以发布到release库:mvn nexus-staging:release,nexus会在十分钟后自动同步到maven中央库,并且会在jira里自动评论:OSSRH-65516

    6. 提交新的tag到git中

      1
      2
      3
      git commit -m "Release ${newVersion}"
      git tag ${newVersion}
      git push --tags
    7. 开启下一次版本迭代,修改新的版本号export newVersion=1.1.0-SNAPSHOT && mvn versions:set -DnewVersion=${newVersion} && git commit -m "new feature version"