【问题标题】:maven dependency management mechanism, the priority about dependency management which using import scopemaven依赖管理机制,使用import scope进行依赖管理的优先级
【发布时间】:2020-07-06 06:58:46
【问题描述】:

有两个例子。


示例 1。

项目A的pom是一个简单的pom:

 <groupId>org.demo</groupId>
<artifactId>kafka-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<name>kafka-demo</name>

项目B的pom:

    <parent>
    <artifactId>kafka-demo</artifactId>
    <groupId>org.demo</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>child-one</artifactId>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <scope>compile</scope>
    </dependency>
</dependencies>

在本例中,项目 B 的 spring-boot 版本为 2.0.3.RELEASE。

示例 2。

项目 A 的 pom。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.1.RELEASE</version>
    <relativePath/>
</parent>

<groupId>org.demo</groupId>
<artifactId>kafka-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<name>kafka-demo</name>

项目B的pom同上例。

<parent>
    <artifactId>kafka-demo</artifactId>
    <groupId>org.demo</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>child-one</artifactId>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <scope>compile</scope>
    </dependency>
</dependencies>

示例二中,项目B的spring-boot版本为2.3.1.RELEASE。


我的问题在示例2中,为什么spring-boot的版本是2.3.1,而不是2.0.3。

此范围仅受该部分中 pom 类型的依赖项支持。它指示要替换为指定 POM 部分中的有效依赖项列表的依赖项。由于它们被替换,具有导入范围的依赖项实际上并不参与限制依赖项的传递性。

【问题讨论】:

    标签: java maven


    【解决方案1】:

    AFAIK,在 POM 中直接声明的dependencyManagement 总是比imported dependencyManagement 强。

    假设 import 与在同一位置从 BOM 声明列表相同是错误的。

    所以在您的第二个示例中,其中一个 BOM 用作父级,因此它直接用于生成的有效 POM,而另一个是 import,强度较低。​​

    【讨论】:

    • "在 POM 中直接声明的dependencyManagement 总是比导入的dependencyManagement 强" 这对我来说似乎并不完全正确,在我的测试中,如果他们第一名将获胜都放在同一个pom.xml中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2011-09-11
    • 2012-05-18
    • 2011-04-07
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多