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

时间:2016-02-08 13:37:24

标签: maven maven-release-plugin

我使用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>

有没有办法让release-plugin在git中使用实际的父-pom版本来标记项目,同时仍然将RELEASE保留在master / branch中?

我希望tag(仅)中的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>

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

我能想到这样做的唯一方法是在发布之前使用“版本插件”解析父级,然后确保在之后恢复为“RELEASE”。对我而言,这听起来像一个混乱的选项,因为开发人员会一直忘记它,更不用说每次发布都会有额外的麻烦和git推动。

1 个答案:

答案 0 :(得分:0)

如果你的version-tag包含字符串&#34; RELEASE&#34;当pom被maven加载到内存中时;也就是说,字符串$project.version解析为,那就是所有插件可用的版本,您将无法更改它。

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

也就是说,如果您的<version> - 代码并不包含POM的版本,那么您自己就可以了。您应该考虑遵循使用maven的标准方法,并找到一些其他解决方案,以解决导致您首先将该字符串放在那里的任何问题。

关于maven和git发布主题的最后一点说明:Atlassian开发了一个比原始maven发布插件link更通用的发布插件。它专为&#34; git flow&#34;而定制。分支模型。