我们在内部使用Maven和Subversion。我们还使用Maven的Release插件。我们在执行以下(正确的,我假设的)步骤时注意到了下面描述的问题。
1。我们运行release:prepare
:
1.0.0
。svn copy trunk/myproject tags/myproject-1.0.0
,从而创建代码myproject-1.0.0
。1.0.1-SNAPSHOT
。 2. 我们运行release:rollback
:
1.0.0-SNAPSHOT
。 3。我们对trunk进行了更多更改,显然是针对版本1.0.0-SNAPSHOT
。
4. 我们再次运行release:prepare
:
1.0.0
。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
:
myproject-1.0.0
。问题很明显:步骤3中的更改没有进入标记。我们现在发布1.0.0
而没有更改。
问题是:我们如何解决这个问题? Maven的发布回滚功能本身是否已经破解?
答案 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中删除标签,但是,再次,我们必须以回滚的方式执行此操作。