博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache Maven Release Plugin插件详解
阅读量:4178 次
发布时间:2019-05-26

本文共 4367 字,大约阅读时间需要 14 分钟。

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

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

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

 
   
     
org.apache.maven.plugins
     
maven-release-plugin
     
2.5.3
...
    
...

2) 在POM中配置scm的developerConnection

  
scm:git:ssh://gerrit.mycompany.com:29418/myproject

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格式。

   
v@{project.version}
  • 更新POM,转换POM中的SCM信息,包括更新tag
  • 执行<preparationGoals>设置的goals

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

   
clean verify

执行期间,对项目代码进行单元测试(要跳过单元测试,则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, 默认false
  • projectVersionPolicyId, 默认值default

3) release:prepare-with-pom

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

4) release:perform

基本过程:

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

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

   
deploy
  • 引用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/

转载地址:http://rmlai.baihongyu.com/

你可能感兴趣的文章
如何更好的隐藏你自己,让我们谈谈什么是封装?
查看>>
文科生北海糖的:Java之路——继承
查看>>
Makefile 中:= ?= += =的区别
查看>>
消灭编译警告(Warning)
查看>>
(GCC) How can I hide "defined but not used" warnings in GCC?
查看>>
错误: 隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]
查看>>
error: two or more data types in declaration specifiers原因及解决方法
查看>>
Linux驱动基础开发2
查看>>
ioctl在socket中的一些用法及示例
查看>>
Linux设备驱动--块设备(二)之相关结构体
查看>>
Linux设备驱动--块设备(四)之“自造请求”
查看>>
Nand Flash和Nor Flash相关知识
查看>>
NAND flash和NOR flash的区别
查看>>
writeb(), writew(), writel(),readb(), readw(), readl() 宏函数
查看>>
NOR Flash擦写和原理分析
查看>>
51单片机程序执行流程(STARTUP.A51)
查看>>
原码, 反码, 补码 详解
查看>>
Java自学第一阶段(二)- 小试牛刀
查看>>
Java自学第一阶段(三)- 万能的变量
查看>>
Java自学第一阶段(四)-万能的变量(2)
查看>>