带有参数化版本的maven发布插件

时间:2012-01-19 13:14:43

标签: maven version maven-3 maven-release-plugin parameterized

是否可以将maven release插件与多模块项目一起使用,其中一些模块间依赖项是使用父pom中的参数指定的?

当我尝试呼叫释放时:准备我收到以下错误:

  

[错误]无法执行目标org.apache.maven.plugins:maven-release-plugin:2.1:prepare(default-cli)on project forest-parent:版本无法更新:$ {some.version } - > [帮助1]

这是我的插件定义:

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <goals>deploy</goals>
                <tagBase>https://svn.domain.com/svn/project/tags</tagBase>
                <autoVersionSubmodules>true</autoVersionSubmodules>
                <tagNameFormat>@{project.version}</tagNameFormat>
            </configuration>
        </plugin>

提前致谢!

2 个答案:

答案 0 :(得分:3)

该插件目前不支持来自父级的参数化版本(也尝试过v2.2.2)。解决方案是使用{project.version}。

答案 1 :(得分:1)

TL; DR:接受的答案没有帮助; maven-release-plugin中的已知缺陷; maven 3.5中新的CI友好版本有所帮助(但并不能真正解决OP问题)

长版:

接受的答案无效。我进行了实验,发现@Dormouse评论的结果。添加此答案以获得更多说明:

在变量名前加上“项目”。获得Maven版本:准备克服原始错误,但会更新自定义版本模块的版本以匹配所有其他版本

因此,如@Dormouse所述,该属性无用,因为在第一次maven版本调用之后,该属性将不再引用模块的正确版本。

例如-演示的摘录:

父pom.xml:

<version>1.0-SNAPSHOT</version>
<properties>
    <!-- note the custom property starts with "project" to pass release:prepare -->
    <project.version.custom>1.2-SNAPSHOT</project.version.custom>
</properties>
<modules>
    <module>custom-versioned-module</module>
    <module>dependent-module</module>
</modules

custom-versioned-module / pom.xml:

<parent>
    <version>1.0-SNAPSHOT</version>
</parent>
<artifactId>custom-versioned-module</artifactId>
<!-- this module has 1.2-SNAPSHOT instead of 1.0-SNAPSHOT like the rest -->
<version>1.2-SNAPSHOT</version>

dependent-module / pom.xml

<parent>
    <version>1.0-SNAPSHOT</version>
</parent>
<artifactId>dependent-module</artifactId>
<dependencies>
    <dependency>
        <artifactId>custom-versioned-module</artifactId>
        <!-- experiment with variable version -->
        <version>${project.version.custom}</version>
    </dependency>
 </dependencies>

现在尝试mvn release:prepare -DdryRun=true并检查创建的文件。 (您可以通过查看pom.xml.next来查看release:perform 将要执行的操作-如果不使用-DdryRun,则它将用于替换pom.xml)

您将看到版本 property 保持不变,依赖性也是如此(我们不希望maven-release-plugin陷入混乱),但是实际版本自定义版本模块的更改!

custom-versioned-module / pom.xml.next:

<parent>
    <version>1.1-SNAPSHOT</version>
</parent>
<artifactId>custom-versioned-module</artifactId>
<version>1.1-SNAPSHOT</version>

父版本从1.0升级到1.1,但模块版本从1.2降低到1.1(只是简单地做到了相同,没有具体减少) >

同时该属性本身保持在1.2,因此,如果您实际发布,则下一个构建将失败。

请注意,这里记录为行家缺陷:https://issues.apache.org/jira/browse/MRELEASE-782

3.5版的CI友好版本在某种程度上减轻了它的负担:

https://maven.apache.org/maven-ci-friendly.html