准备Release
准备Release通常需要以下Release阶段:
- 检查项目源中是否有未提交的更改
- 检查是否有
SNAPSHOT
版本依赖 - 将POM中的版本从
x-SNAPSHOT
更改为新版本(即执行目标时将提示您需要使用的版本) - 转换POM中的SCM信息为标签地址
- 对修改的POM运行项目测试,以确认一切正常工作
- 提交修改后的POM
- 给SCM中的代码打新的版本名称tag(将被提示)
- 将POM中的版本更改为新值
y-SNAPSHOT
(将被提示) - 提交修改后的POM
要准备一个Release需执行以下命令:
mvn release:prepare
注意:如果发生错误或者取消进程,则再次运行该命令将从最后一个停止的位置开始。
如果您想重新启动,请使用:
mvn release:prepare -Dresume=false
或者,您可以使用:
mvn release:clean release:prepare
注意:如果对源文件进行了任何更改,则可能需要在重新启动准备过程之前还原它们。你可以使用release:rollback
插件来做。
多模块项目
系统将提示您输入项目的每个模块的版本号。如果您希望每个模块都具有与父POM相同的版本,则可以设置autoVersionSubmodules
为true
。现在,您将被要求仅输入一次发布版本和下一个开发版本。
生成Release POM
可以为每个项目生成一个release-pom.xml
文件,包含在release时完全解决的项目记录以供以后使用。从2.0版本开始,这需要调用另一个目标:
mvn release:prepare-with-pom
此目标相当于release:prepare
目标,除了它需要项目预构建以存在以正确填充release-pom.xml
文件。
覆盖默认的标签名称格式
默认情况下,如果不指定标记名称,则会建议使用默认的artifactId
-version
标签名称(如果以非交互方式运行)。
您可以通过传递tag
属性来指定要从命令行使用的确切标签名称,但是如果要生成标记名称,但只是更改默认模式,则可以使用tagNameFormat
配置选项。
例如,要使标签名称默认为版本号,以v
为前缀,您可以像这样配置您的pom:
<project>
[...]
<build>
[...]
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
</configuration>
</plugin>
[...]
</plugins>
[...]
</build>
[...]
</project>
tagNameFormat
使用@{
and}
作为分隔符,以确保在版本转换发生之前,默认的Maven属性插值不会替换值。
支持以下属性:
project.groupId
对应于项目的groupId。project.artifactId
对应于项目的artifactId。project.version
对应于项目的发行版本。
project.
前缀是可选的,可以省略。
以下为实际操作输出样例:
/usr/lib/jvm/jdk1.8.0_45/bin/java -Dmaven.home=/opt/idea-IC-145.1617.8/plugins/maven/lib/maven3 -Dclassworlds.conf=/opt/idea-IC-145.1617.8/plugins/maven/lib/maven3/bin/m2.conf -Didea.launcher.port=7535 -Didea.launcher.bin.path=/opt/idea-IC-145.1617.8/bin -Dfile.encoding=UTF-8 -classpath /opt/idea-IC-145.1617.8/plugins/maven/lib/maven3/boot/plexus-classworlds-2.4.jar:/opt/idea-IC-145.1617.8/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher -Didea.version=2016.1.3 org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building auto-deployment 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-release-plugin:2.5.3:prepare (default-cli) @ auto-deployment ---
[INFO] Verifying that there are no local modifications... 步骤1: 检查项目源中是否有未提交的更改
[INFO] ignoring changes on: **/pom.xml.releaseBackup, **/pom.xml.next, **/pom.xml.tag, **/pom.xml.branch, **/release.properties, **/pom.xml.backup
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git rev-parse --show-toplevel
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git status --porcelain .
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Checking dependencies and plugins for snapshots ... 步骤2: 检查是否有SNAPSHOT版本依赖
What is the release version for "auto-deployment"? (com.augmentum.study:auto-deployment) 1.0: : 步骤3: 将POM中的版本从x-SNAPSHOT更改为新版本
What is SCM release tag or label for "auto-deployment"? (com.augmentum.study:auto-deployment) v1.0: : 步骤4: 转换POM中的SCM信息为标签地址
What is the new development version for "auto-deployment"? (com.augmentum.study:auto-deployment) 1.1-SNAPSHOT: :
[INFO] Transforming 'auto-deployment'...
[INFO] Not generating release POMs
[INFO] Executing goals 'clean verify'... 步骤5: 对修改的POM运行项目测试,以确认一切正常工作
[WARNING] Maven will be executed in interactive mode, but no input stream has been configured for this MavenInvoker instance.
[INFO] [INFO] Scanning for projects...
[INFO] [INFO]
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Building auto-deployment 1.0
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO]
[INFO] [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ auto-deployment ---
[INFO] [INFO] Deleting /home/user/Workspace/git-study/auto-deployment/target
[INFO] [INFO]
[INFO] [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ auto-deployment ---
[INFO] [debug] execute contextualize
[INFO] [INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] [INFO] skip non existing resourceDirectory /home/user/Workspace/git-study/auto-deployment/src/main/resources
[INFO] [INFO]
[INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ auto-deployment ---
[INFO] [INFO] Compiling 1 source file to /home/user/Workspace/git-study/auto-deployment/target/classes
[INFO] [INFO]
[INFO] [INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ auto-deployment ---
[INFO] [debug] execute contextualize
[INFO] [INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] [INFO] skip non existing resourceDirectory /home/user/Workspace/git-study/auto-deployment/src/test/resources
[INFO] [INFO]
[INFO] [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ auto-deployment ---
[INFO] [INFO] Compiling 1 source file to /home/user/Workspace/git-study/auto-deployment/target/test-classes
[INFO] [INFO]
[INFO] [INFO] --- maven-surefire-plugin:2.10:test (default-test) @ auto-deployment ---
[INFO] [INFO] Surefire report directory: /home/user/Workspace/git-study/auto-deployment/target/surefire-reports
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.augmentum.study.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.011 sec
[INFO]
[INFO] Results :
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] [INFO]
[INFO] [INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ auto-deployment ---
[INFO] [INFO] Building jar: /home/user/Workspace/git-study/auto-deployment/target/auto-deployment-1.0.jar
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] BUILD SUCCESS
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time: 2.832s
[INFO] [INFO] Finished at: Fri May 26 15:32:00 CST 2017
[INFO] [INFO] Final Memory: 20M/143M
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] Checking in modified POMs...
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git add -- pom.xml 步骤6: 提交修改后的POM
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git rev-parse --show-toplevel
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git status --porcelain .
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git commit --verbose -F /tmp/maven-scm-357213871.commit pom.xml
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git symbolic-ref HEAD
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git push git@github.com:****/git-study.git refs/heads/release/1.0:refs/heads/release/1.0
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Tagging release with the label v1.0... 步骤7: 给SCM中的代码打新的版本名称tag
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git tag -F /tmp/maven-scm-258879925.commit v1.0
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git push git@github.com:****/git-study.git refs/tags/v1.0
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git ls-files
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Transforming 'auto-deployment'...
[INFO] Not removing release POMs
[INFO] Checking in modified POMs...
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git add -- pom.xml 步骤8: 将POM中的版本更改为新值y-SNAPSHOT
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git rev-parse --show-toplevel
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git status --porcelain .
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git commit --verbose -F /tmp/maven-scm-252955280.commit pom.xml
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git symbolic-ref HEAD 步骤9: 提交修改后的POM
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Executing: /bin/sh -c cd /home/user/Workspace/git-study/auto-deployment && git push git@github.com:****/git-study.git refs/heads/release/1.0:refs/heads/release/1.0
[INFO] Working directory: /home/user/Workspace/git-study/auto-deployment
[INFO] Release preparation complete.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 39.751s
[INFO] Finished at: Fri May 26 15:32:22 CST 2017
[INFO] Final Memory: 9M/150M
[INFO] ------------------------------------------------------------------------
Process finished with exit code 0