当前位置: 首页 > 知识库问答 >
问题:

maven依赖管理机制,使用导入范围的依赖管理优先级

卫烨
2023-03-14

项目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>

在本例中,project B的spring-boot版本是2.0.3.release。

<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>
<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>

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

共有1个答案

韩佐
2023-03-14

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

认为导入与在同一位置声明BOM中的列表相同是错误的。

因此,在第二个示例中,其中一个BOM用作父BOM,因此它直接用于结果的有效POM中,而另一个则是导入,它的强度较低。

 类似资料:
  • 我正在使用Maven,我希望使用一些在dependencyManagement部分中有许多依赖项的工件作为父POM。但是我也希望在我的POM中有一个dependencyManagement部分,因为我的工件将是其他一些子模块的父POM。 示例: 假设这两个父POM都为某些依赖项定义了一个版本(假设jackson的版本),但每个都有不同的版本。

  • When you want to add, upgrade, or remove dependencies there are a couple of different commands you need to know. Each command will automatically update your package.json and yarn.lock files. Adding a

  • 简介 在第三章我们在构建To Do应用的时候学习到了怎么声明对Servlet ApI的依赖,Gradle的领域特定语言使得声明依赖和仓库变得很简单,你只需要在dependencies脚本中声明你所依赖的库,然后你需要告诉构建系统要从哪个仓库里下载依赖。提供了这两个信息,Gradle就能自动解析、下载依赖到你的电脑上,如果有需要会存储在本地缓存中必备以后需要。 这一章我们将介绍Gradle对依赖管理

  • PHP 有很多可供使用的库、框架和组件。通常你的项目都会使用到其中的若干项 - 这些就是项目的依赖。直到最近,PHP 也没有一个很好的方式来管理这些项目依赖。即使你通过手动的方式去管理,你依然会为自动加载器而担心。但现在这已经不再是问题了。 目前 PHP 有两个使用较多的包管理系统 - Composer 和 PEAR。Composer 是 PHP 所使用的最流行的包管理器,然而在很长的一段时间里,

  • 在San CLI UI中,可直接进行项目插件和依赖的安装、更新、卸载、删除等操作,依赖管理和插件管理的核心是npm包的安装可视化操作,好处是: npm install的可视化管理,组件升级更直观 操作简单,快速引入依赖 CLI的插件集合,更容易发现新包,提升检索效率 依赖管理 在依赖管理中,可以查看项目已安装的依赖列表,也可以在上方的搜索框中搜索项目已安装的依赖,然后更新或卸载它们。 安装依赖 点

  • SOFABoot 是在 Spring Boot 的基础上提供的功能扩展。基于 Spring Boot 的机制,SOFABoot 管理了 SOFA 中间件的依赖,并且提供了 Spring Boot 的 Starter,方便用户在 Spring Boot 中使用 SOFA 中间件。 SOFABoot 依赖管理 – Maven 在使用 SOFA 中间件之前,需要引入 SOFABoot 依赖管理。类似 S