Maven 版本 : Prepare/Perform after Rollback incorrectly succeeds with wrong content

标签 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. 我们对主干进行了更多更改,显然是针对版本 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 的发布回滚功能是否天生就坏了?

最佳答案

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

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

The created branch/tag in SCM for the release is removed. Note: This is not yet implemented so you will need to manually remove the branch/tag from your SCM. For more info see MRELEASE-229.

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

关于Maven 版本 : Prepare/Perform after Rollback incorrectly succeeds with wrong content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16464598/

相关文章:

maven - 我正在将Maven WAR构建迁移到Gradle。我如何使过滤器 block 以相同的方式运行?

java - 设置 Maven 的问题

java - 找不到 javax.transaction :jta: in maven

Maven 插件继承自 pluginManagement

maven - Maven生成POM文件

hadoop - 使用Maven构建hadoop

java - flowable 不存在 Maven 依赖关系

java - 从 pom 设置 groovysh 类路径

java - 从 Maven 构建中排除测试

maven - 无法读取 maven-resources-plugin 的 Artifact 描述符