13.4节介绍了如何使用Maven Release Plugin自动化版本发布,如果回顾一下图13-2,就会发现分支创建的操作还没有具体涉及。本节就继续基于实际的样例讲解如何自动化创建分支。
在图13-2中可以看到,在正式发布版本1.1.0的同时,还可以创建一个分支用来修复将来这个版本可能遇到的重大Bug。这个过程可以手工完成,例如使用svn copy操作将主干代码复制到一个名为1.1.x的分支中,然后修改分支中的POM文件,升级其版本为1.1.1-SNAPSHOT,这会涉及很多Subversion操作。
使用Maven Release Plugin的branch目标,它能够帮我们自动化这些操作:
·检查本地有无未提交的代码。
·为分支更改POM的版本,例如从1.1.0-SNAPSHOT改变成1.1.1-SNAPSHOT。
·将POM中的SCM信息更新为分支地址。
·提交以上更改。
·将主干的代码复制到分支中。
·修改本地代码使其回退到分之前的版本(用户可以指定新的版本)。
·提交本地更改。
当然,为了让Maven Release Plugin为我们工作,和版本发布一样,必须在POM中提供正确的SCM信息。此外,由于分支操作会涉及版本控制系统里的分支地址,因此还要为Maven Release Plugin配置分支基础目录,如代码清单13-4所示。
代码清单13-4 配置maven-release-plugin提供分支基础目录
然而tagBase和branchBase并非是一定要配置的。如果为版本控制仓库使用了标准的Subversion布局,即在平行的trunk/tags/branches目录下分别放置项目主干代码、标签代码和分支代码,那么Maven Release Plugin就能够自动根据主干代码位置计算出标签及分支代码位置,因此你就可以省略这两项配置。
理解了创建分支所将执行的实际行为后,就可以在项目目录下运行如下命令以创建分支:
上述命令中使用了Maven Release Plugin的branch目标,-DbranchName=1.1.x用来配置所要创建的分支的名称,-DupdateBranchVersions=true表示为分支使用新的版本,-DupdateWorkingCopyVersions=false表示不更新本地代码(即主干)的版本。运行上述命令之后,Maven会提示输入分支项目的版本。例如:
用户根据自己的需要为分支输入新的版本后按Enter键,Maven就会处理其余的操作。最后,用户就能在源码库中找到Maven创建的分支,如https://192.168.1.103/app/branches/1.1.x/。在这里,POM中的版本已经升级到了1.1.1-SNAPSHOT。