Apache Maven Release Plugin插件详解

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/taiyangdao/article/details/82658799

Release插件是Apache Maven团队提供的官方插件,最终版本是2015-10-17发布的2.5.3,能够为项目代码库打tag,并将项目代码库中的代码发布到SCM的新版本。

1. 使用Release插件的前提条件

1) 明确使用的maven-release-plugin版本,当前为2.5.3

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-release-plugin</artifactId>
      <version>2.5.3</version>
    </plugin>
    ...

2) 在POM中配置scm的developerConnection

<scm>
  <developerConnection>scm:git:ssh://gerrit.mycompany.com:29418/myproject</developerConnection>
</scm>

2. Release插件的Maven goals

1) release:clean

2) release:prepare

基本过程:

  • 生成release.properties文件
  • 检查本地项目代码中是否有未提交的modifications
  • 检查项目的POM依赖或插件是否有SNAPSHOT版本
  • 更新POM,将项目的version从*-SNAPSHOT改为用户输入的发布版本(提示用户输入)
  • 确定项目tag(tag名提示用户输入)

默认tag格式为@{project.artifactId}-@{project.version},也可以配置<tagNameFormat>以设置tag格式。

<configuration>
    <preparationGoals>clean verify</preparationGoals>
</configuration>
  • 更新POM,转换POM中的SCM信息,包括更新tag
  • 执行<preparationGoals>设置的goals

默认为clean verify,即执行mvn clean verify,也可以配置<preparationGoals>。

<configuration>
    <preparationGoals>clean verify</preparationGoals>
</configuration>

执行期间,对项目代码进行单元测试(要跳过单元测试,则mvn -Darguments="-DskipTests" ...)。

  • 验证成功,第一次提交POM修改,并push到Git库的refs/heads/master

                    git add -- mymodule\pom.xml pom.xml
                    git rev-parse --show-toplevel
                    git status --porcelain .
                    git commit --verbose -F C:\Users\...\Temp\maven-scm-1044264625.commit mymodule\pom.xml pom.xml
                    git symbolic-ref HEAD
                    git push ssh://gerrit.mycompany.com:29418/myproject refs/heads/master:refs/heads/master

  • 为当前项目打tag,并push到Git库的refs/tags/my_tag_name

                    git tag -F C:\Users\...\Temp\maven-scm-7417013.commit myproject-1.0.1
                    git push ssh://gerrit.mycompany.com:29418/myproject refs/tags/myproject-1.0.1

  • 为项目的version产生一个新的开发版本*-SNAPSHOT(提示用户输入)
  • 更新POM为开发版本,并将更新后的POM再次提交到Git库

                    git add -- mymodule\pom.xml pom.xml
                    git rev-parse --show-toplevel
                    git status --porcelain .
                    git commit --verbose -F C:\Users\...\Temp\maven-scm-1044264625.commit mymodule\pom.xml pom.xml
                    git symbolic-ref HEAD
                    git push ssh://gerrit.mycompany.com:29418/myproject refs/heads/master:refs/heads/master

release:prepare的可配置的参数:

  •                 username, 访问SCM的用户名
  •                 password, 访问SCM的密码
  •                 tag或releaseLabel, 使用的SCM tag
  •                 tagNameFormat, 默认值@{project.artifactId}-@{project.version}
  •                 tagBase, SCM库中tag的基础目录
  •                 scmCommentPrefix, 默认值[maven-release-plugin] ,所有SCM修改的消息前缀
  •                 pushChanges, 默认值true
  •                 resume, 默认值true
  •                 autoVersionSubmodules, 默认值false,提示为各个子模块输入版本;如果值true,表示所有子模块采用与父模块相同的版本
  •                 releaseVersion, 要发布的版本
  •                 developmentVersion, 本地工作目录的下一个开发版本
  •                 preparationGoals, 默认值clean verify,在转换到发布版本之后,但是在commit之前执行
  •                 completionGoals, 没有默认值,在转换到下一个开发版本之后,但是在commit之前执行
  •                 generateReleasePoms, 默认值false,过时了
  •                 useEditMode, 默认值false,进入SCM的修改模式
  •                 updateDependencies, 默认值true,更新依赖版本为下一个开发版本
  •                 addSchema, 默认值true
  •                 commitByProject,
  •                 ignoreSnapshots, 默认值false,
  •                 allowReleasePluginSnapshot, 默认值false,仅用于插件本身的开发测试
  •                 checkModificationExcludeList,
  •                 updateWorkingCopyVersions, 默认值true,更新工作目录的版本为developmentVersion值
  •                 waitBeforeTagging, 默认值0,等待创建tag的时间,单位秒
  •                 remoteTagging, 默认值true,目前只对SCM, SVN有效。
  •                 suppressCommitBeforeTag, 默认值false,tag创建完成之前拒绝提交修改,remoteTagging=false才有效
  •                 dryRun,
  •                 projectVersionPolicyId, 默认值default

3) release:prepare-with-pom

功能类似于release:prepare,但需要存在一个项目的已有发布构件,从而能够生成release-pom.xml文件

4) release:perform

基本过程:

  • 依赖于release:prepare阶段生成的release.properties文件
  • 基于SCM的URL检出prepare阶段刚刚打标签的代码,可以带一个可选的tag,如:
<scm>
    <url>scm:git:ssh://gerrit.mycompany.com:29418/myproject</url>
    <tag>myproject-1.0.1</tag>
</scm>
  • 执行指定的Maven goals

默认为deploy site-deploy,将项目代码发布到SCM库中。

<configuration>
    <goals>deploy</goals>
</configuration>

  • 引用release:clean,删除release.properties等发布过程文件

5) release:stage

  •             功能类似于release:perform,但专用于“预发布”
  •             需要指定stagingRepository参数,即预发布库
  •             workingDirectory参数也是必须的,但其有默认值${project.build.directory}/checkout
  •             预发布成功后,将“预发布库”复制到“发布库”,即从stage库到release库
  •             保留release.properties等发布过程文件
  •             出错可以回滚,执行release:rollback

6) release:rollback

7) release:branch

  •             创建一个新分支

命令:mvn release:branch -DbranchName=my-branch

8) release:update-versions

3. Maven项目的发布过程

在POM中配置了Release插件的Maven项目,其发布过程默认即包含release:prepare和release:perform两大步。如前所述,实际上就是在执行mvn clean verify deploy site-deploy

4. 非交互式模式的发布

从属性文件release.properties中读取发布参数,进行无人值守的自动发布。

命令:
        mvn -B release:prepare release:perform
        或
        mvn --batch-mode release:prepare release:perform

5. 正式发布前的Dry Run模式

在正式发布之前,模拟执行发布,保留发布过程中的文件,以检查输出的中间结果。
命令:mvn release:prepare -DdryRun=true

此后,要正式执行发布,还需要先清除中间结果文件,然后再执行正式的发布。
命令:mvn release:clean release:prepare release:perform
 

参考链接:

    http://maven.apache.org/plugins/maven-release-plugin/
    https://github.com/apache/maven-release/

猜你喜欢

转载自blog.csdn.net/taiyangdao/article/details/82658799