Maven release

简介

Maven release不在maven默认生命周期内,需要通过plugin来实现。Maven release可以自动管理pom.xml中的版本号,以及git tag的版本号。
常用的命令有以下几个:

  • mvn release:clean删除由mvn release:prepare生成的所有文件
  • mvn release:prepare它会运行mvn clean verify命令生成jar包,并且会往git上提交并push当前版本tag,同时为当前版本的代码创建分支,然后修改pom中的版本号(默认叠加1,可以手动指定),最后commit对pom.xml的修改(可以通过mvn release:rollback命令回滚prepare的修改(包括git提交),但是提交的tag无法回滚)。
  • mvn release:perform它会将prepare创建的版本分支代码拉倒本地,并执行mvn deploy命令,相当于完整的maven默认生命周期流程。

参考Maven Release Plugin

运行要求

要运行release相关命令,首先需要配置pom.xml

<project>
  ...
  <scm>
    <developerConnection>scm:git:https://github.com/..../....</developerConnection>
  </scm>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>3.0.0-M1</version>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

是必不可少的
中的指向的就是git的项目地址,最后不加.git

git认证

除了上面两个必要标签,还需要注意的是访问git的配置信息
对于maven来说,并不知道你的git用户名密码所以需要在settings.xml中新增

<servers>
        <server>
            <id>git</id>
            <username>*******@outlook.com</username>
            <password>{wb83456gfhgV71sdfewrvx453EJt4iOVlQ=}</password>
        </server>
</servers>

其中id是pom.xml用来匹配对应服务的,需要在pom.xml中配置该id:

<properties>
        <project.scm.id>git</project.scm.id>
</properties>

密码加密

此外之前settings.xml中的是加密的,没有明文密码。获取加密密码还需要更多配置:

  1. 需要执行mvn --encrypt-master-password命令,获得master密码
  2. 然后将master密码保存到${user.home}/.m2/settings-security.xml文件中,只需要以下结构:
<settingsSecurity>
  <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>
  1. 执行mvn --encrypt-password命令,按照提示输入你的git密码以获取密文。

更多关于Maven密码加密,参考Maven Password Encrypt

由于mvn release:perform内部执行了mvn deploy命令,因此想要mvn release:perform正常运行,必须在pom.xml中配置<distributionManagement>

参考maven distributionManagement

如果没有计划将生成的jar包分发到仓库管理器上(例如nexus),又想执行perform,那么可以将deploy插件屏蔽掉

<project xmlns="http://maven.apache.org/POM/4.0.0">
    ...
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</project>