【问题标题】:Maven: property substitution not done for /project/version tag of pom?Maven:没有为 pom 的 /project/version 标签完成属性替换?
【发布时间】:2011-04-10 17:23:14
【问题描述】:

http://maven.apache.org/pom.html#Properties 表示属性“可以在 POM 中的任何位置访问值”。

是否应该读作“在 POM 中的大多数地方都可以访问”?

我可以像这样指定依赖的版本没问题:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
</dependency>

但是项目本身的版本是这样的:

<project xmlns="http://maven.apache.org/POM/4.0.0" ...>

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>${myversion}</version>

    <properties>
        <myversion>8</myversion>
    </properties>

    <modules>
        <module>alpha</module>
        <module>beta</module>
    </modules>
    ...

如果我尝试这个 将不会取值 8。这里我在 pom 中定义了 ${myversion} 但如果我在命令行上指定 -Dmyversion=8 似乎也是如此。

如果其中一个模块使用硬编码的版本号指定其父模块,如下所示:

<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>8</version>
</parent>

当我尝试构建时,当 maven 来查看模块的 pom 时,它会说它找不到版本 8 的给定父 pom。

但是,如果我也将父版本中的版本硬编码为 8,而不是使用 ${myversion},那么一切正常。

所以在我看来似乎父 pom 的 /project/version 标记不会发生属性替换。

是这种情况还是对我所看到的情况有其他解释?

问候,

/乔治

【问题讨论】:

    标签: maven-2 properties substitution pom.xml


    【解决方案1】:

    在 Maven 2.x 的设计中,/project/parent/(groupId|artifactId|version)/project/(groupId|artifactId|version) 中不允许属性替换。

    所以规则是:

    • 在顶部 project/version 元素中对版本进行硬编码。
    • 在子元素的project/parent/version 元素中硬编码版本。
    • 子级继承版本,除非他们想覆盖它
      • 因此不需要${myversion} 属性
    • 使用${project.groupId}${project.version} 实现模块间依赖关系。

    您会在 maven 用户列表中找到无数关于此主题的线程(例如,请参阅 Pom Parent Version Properties),我只想说,任何解决上述规则的尝试都是错误的并且不起作用。

    在 Maven 3.1 中将允许使用更少的 parent

    另见

    【讨论】:

    • 对规则的简洁描述。我很高兴您说 Maven 3.1 中将出现无版本父级。我真的无法忍受每个 POM 对版本进行一次硬编码的想法。在 Maven 2 和 3 中,将每个 pom 中的版本“硬编码”(作为顶级版本,作为子版本的父版本)作为对顶级 pom 中定义的属性的引用,似乎都可以正常工作,但是这显然是 hacky 和 ​​Maven 3 抱怨。
    • 没有进入 Maven 3.1 :(
    猜你喜欢
    • 2019-08-18
    • 2015-10-31
    • 2015-08-22
    • 2018-05-16
    • 2014-03-12
    • 2016-01-29
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多