Maven管理依赖项 - 从父pom解析$ {project.version}

时间:2013-06-03 11:21:34

标签: maven maven-3 build-dependencies

占位符${project.version}如何解决来自父pom的托管属性?我希望它在全局范围内得到解决,所以当父pom有版本2时,${project.version}也会被解析为版本2.

在父母pom中我有:

<groupId>my.group</groupId>
<artifactId>parent</artifactId>
<version>2</version>
<packaging>pom</packaging>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>my.group</groupId>
            <artifactId>dep</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>     

在孩子我使用

<parent>
    <groupId>my.group</groupId>
    <artifactId>parent</artifactId>
    <version>2</version>
</parent>
<version>1</version>
<artifactId>child</artifactId>

但是使用了工件my.group.dep.1.jar,而不是my.group.dep.2.jar。因此,占位符已解析为项目的版本使用托管依赖项,而不是项目定义依赖项的版本。

这是预期的行为吗?我正在使用 maven 3.0.4。

1 个答案:

答案 0 :(得分:32)

您必须跳过子级中的<version>标记,但保留<parent><version> ... </parent>标记。

http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

  

要注意的一个因素是这些变量在之后处理   继承如上所述。这意味着如果是父项目   使用变量,然后在子节点中定义它,而不是父节点,   将是最终使用的那个。