为什么 release:prepare 将版本改回 SNAPSHOT?

Why does release:prepare change versions back to SNAPSHOT?

我正在使用 maven-release-plugin,我注意到它似乎在最后将已发布的版本更改回 -SNAPSHOT。

这是我传递给 maven 的命令行参数:

--batch-mode release:prepare -DupdateWorkingCopyVersions=false -Darguments="-DskipTests -Djava.awt.headless=true -Dmaven.javadoc.failOnError=false"

一切似乎都很顺利 - 我注意到插件的提交和推送,其中所有正确的版本号确实更新为没有 -SNAPSHOT。

[WARNING] Ignoring unrecognized line: ?? myProject/pom.xml.releaseBackup

我在日志文件中看到了一些警告 ^(不确定这是否相关,但似乎与发布插件有关)

终于看到插件又修改了POMs:

[INFO] Transforming 'myProject POM'...
[INFO]   Updating my-project to 6.2-SNAPSHOT

在此之后,插件使用以下内容进行提交并推送:

[maven-release-plugin] rollback changes from release preparation of myProject-6.2

为什么会发生最后一点?

我不了解 release:prepare 或 release:perform 的生命周期。为什么我的所有代码似乎都构建了两次?

感谢任何帮助。谢谢

据我了解,release:prepare

  • 将 POM 文件更新到指定的版本
  • 执行构建,运行测试
  • 执行其他验证(即不依赖于 SNAPSHOT 工件)
  • 提交更改(应仅限于 POM 文件及其版本)
  • 标记刚刚提交的源
  • 将 pom 文件更新回指定的 SNAPSHOT 版本
  • 提交这些更改

注意:我不确定这是不是特定顺序。上面的列表不是一个详尽的列表,只是我的回忆。

此时,版本不存在。这就是 release:perform 所做的。 Release:perform 根据 TAG 检查代码并根据标记的源构建工件。

这就是 release:prepare 将其移回快照版本的原因。它只是准备源代码以针对它构建一个版本。在该分支上工作的开发人员,一旦标记被剪切,就可以继续提交更改而不会影响 release:perform。它还允许在以后重新剪辑版本,因为它是根据标签构建的。

当然,这个插件有变体,已记录在案。但是,据我了解,这是一个常见的工作流程。