Maven版本:回滚后准备/执行错误内容错误成功

Mih*_*ila 3 maven-2 maven-3 maven-scm maven maven-release-plugin

我们在内部使用Maven和Subversion.我们还使用Maven的Release插件.我们在执行以下(正确的,我假定的)步骤时注意到了下面描述的问题.

1.我们经营release:prepare:

  • Maven将主干版本更新为1.0.0.
  • Maven运行svn copy trunk/myproject tags/myproject-1.0.0,从而创建标签myproject-1.0.0.
  • Maven将主干版本更新为1.0.1-SNAPSHOT.

2.我们经营release:rollback:

  • Maven将trunk版本重置为1.0.0-SNAPSHOT.
  • Maven没有删除标签,因为Maven不会做这种事情.

3,我们承诺更多的变化干路,显然针对的版本1.0.0-SNAPSHOT.


4.我们跑release:prepare一次:

  • Maven将主干版本更新为1.0.0.
  • Maven运行svn copy trunk/myproject tags/myproject-1.0.0,认为它创建myproject-1.0.0了最新主干的标签.但是,唉,Subversion(1.6和1.7一样)将代替tags/myproject-1.0.0/myprojectMaven 创建.

5.我们经营release:perform:

  • Maven检查标签的内容myproject-1.0.0.
  • Maven构建内容并将结果部署到Nexus.

问题很明显:步骤3中的更改未使其成为标记.我们现在正在发布1.0.0而没有改变它.

问题是:我们如何解决这个问题?Maven的发布回滚功能本身是否已损坏?

Mih*_*ila 6

公平地说,rollback应该将项目和SCM重置为允许一秒钟prepare发生的状态.这包括删除标签.答案现在很明显(谷歌搜索"maven release rollback remove tag"):

http://maven.apache.org/maven-release/maven-release-plugin/examples/rollback-release.html:

将删除SCM中用于发布的已创建分支/标记.注意:这尚未实现,因此您需要手动从SCM中删除分支/标记.有关更多信息,请参阅MRELEASE-229.

然后,解决方案将强制release:rollback包括使用类似的东西删除SCM标记的命令org.codehaus.mojo:exec-maven-plugin.除此之外,将rollback内部包装在外部执行该操作的脚本中.