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>
...
如果我试试这个&lt; version&gt;不会取值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标签不会发生属性替换。
是这种情况还是对我似乎看到的内容有其他解释?
此致
/乔治
答案 0 :(得分:31)
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
。