Maven 发布插件 - 标记时解析父版本的发布版本

Maven release plugin - resolving RELEASE version of parent when tagging

我使用 maven 发布插件发布项目。 parent-pom 的版本设置为 'RELEASE'。

像这样:

<parent>
    <groupId>my.group.id</groupId>
    <artifactId>my-parent-pom</artifactId>
    <version>RELEASE</version>
</parent>
<artifactId>My Application</artifactId>
<version>1.1.1-SNAPSHOT</version>

有什么方法可以让发布插件在 git 中用实际的父 pom 版本标记项目,同时仍然保持 master/branch 中的 RELEASE?

我希望标签中的 pom.xml(仅)看起来像这样:

<parent>
    <groupId>my.group.id</groupId>
    <artifactId>my-parent-pom</artifactId>
    <version>2.4.2</version>
</parent>
<artifactId>My Application</artifactId>
<version>1.1.1</version>

在大多数情况下,我需要使用父级的最新版本。例如。确保 CI 服务器在新的父版本发布后构建并测试所有子版本。但是,如果我以后需要返回到以前的标签,我将不得不手动找出在第一次标记时使用的是哪个版本的父 pom。

我能想到的唯一方法是在发布前使用 'versions plugin' 解析父级,然后确保在之后恢复为 'RELEASE'。对我来说,这听起来像是一个混乱的选择,因为开发人员会一直忘记它,更不用说每次发布都会带来额外的麻烦和 git-推送。

如果你的版本标签包含字符串"RELEASE",当pom被maven加载到内存时;也就是说,这是字符串 $project.version 解析为,然后是所有插件可用的版本,您将无法更改它。

我假设您正在使用 CI 进行实际发布。如果您使用的是 Jenkins 和 M2 Release 插件,那么您可以配置一些可能对您有帮助的环境变量:$MVN_RELEASE_VERSION$IS_M2RELEASEBUILD。例如,您将这些用作 maven scm 插件的输入并进行手动标记。

就是说,如果您的 <version> 标签不包含 POM 的版本,那您就只能靠自己了。您应该考虑遵循使用 maven 的标准方式,并找到其他解决方案来解决导致您首先将该字符串放在那里的任何问题。

关于在 maven 和 git 中发布的主题的最后说明:Atlassian 开发了一个发布插件,它比原始的 maven 发布插件 link 更加通用。它是为 "git flow" 分支模型量身定制的。