【问题标题】:Maven managed dependencies - resolving ${project.version} from parent pomMaven 托管依赖项 - 从父 pom 解析 ${project.version}
【发布时间】:2013-05-29 12:48:58
【问题描述】:

占位符${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。所以占位符被解析为使用托管依赖项的项目版本,而不是定义依赖项的项目版本。

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

【问题讨论】:

    标签: maven maven-3 build-dependencies


    【解决方案1】:

    您必须在子级中跳过&lt;version&gt; 标签,但保留&lt;parent&gt;&lt;version&gt; ... &lt;/parent&gt; 标签。

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

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

    【讨论】:

    • 如果我不希望孩子拥有与父母相同的版本怎么办?通常,如果它们的发布速度不同
    • @Juh_ 然后查看父 pom,检查您将在自己的 pom 中覆盖的所需版本属性的名称。 baeldung.com/spring-boot-starter-parent
    猜你喜欢
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2012-12-27
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    相关资源
    最近更新 更多