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>
...
如果我尝试这个 <version> 将不会取值 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 标记不会发生属性替换。
是这种情况还是对我似乎看到的情况有其他解释?
问候,
/乔治