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

时间:2013-05-09 14:45:56

标签: maven maven-2 maven-3 maven-release-plugin maven-scm

我们在内部使用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将主干版本重置为1.0.0-SNAPSHOT
  • Maven不删除标签,因为Maven不会这样做。

3。我们对trunk进行了更多更改,显然是针对版本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相似)将代表Maven创建tags/myproject-1.0.0/myproject

5. 我们运行release:perform

  • Maven检出标记myproject-1.0.0
  • 的内容
  • Maven构建内容并将结果部署到Nexus。

问题很明显:步骤3中的更改没有进入标记。我们现在发布1.0.0而没有更改。

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

2 个答案:

答案 0 :(得分:5)

公平地说,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包含使用org.codehaus.mojo:exec-maven-plugin之类的内容删除SCM标记的命令。除此之外,将rollback包装在外部执行该操作的脚本中。

答案 1 :(得分:0)

正如您所发现的,release:rollback在没有清理SCM时没有很多实用工具。我们的商店所做的是设置我们的Jenkins自动化与Jenkins M2 Release Plugin一起运行“mvn release:prepare release:perform”。

如果失败了,我们需要在Subversion中删除标签,但是,再次,我们必须以回滚的方式执行此操作。