导入依赖管理与排除

Nic*_*aro 13 maven

我有一个漂亮的BOM,其dependencyManagement部分有很多依赖项,我想创建另一个BOM,导入除了一个以外的所有依赖项.我试过这样做:

... in my dependencyManagement section
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>${spring-boot-version}</version>
    <type>pom</type>
    <scope>import</scope>

    <exclusions>
        <exclusion>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        </exclusion>
    </exclusions>
</dependency>
...
Run Code Online (Sandbox Code Playgroud)

POM正式正确,一切都在编译.但排除被忽略了.我错过了什么?这种方法是否正确?

我正在使用Maven 3+.

nei*_*son 7

从当前的 maven 3.6.3 开始,dependencyManagement 仍未实现排除。但是,您可以将项目特定的“物料清单”(BOM) 作为第一个依赖项包含在 dependencyManagement 部分中,即

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>my-group</groupId>
            <artifactId>my-group-project-bom</artifactId>
            <version>${project.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <type>pom</type>
            <version>${spring-boot.version}</version>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

然后,您可以在项目 BOM 中指定所有必要的工件版本,这些版本将优先于 spring-boot 依赖项版本。

  • dependencyManagement 内的排除确实有效,只要它们不属于导入范围 (2认同)

Fil*_*sus 5

导入时排除不起作用,请尝试将其从依赖项的实际用户中排除

  • 我误解了这一点,所以对于任何阅读的人来说,排除确实可以在 dependencyManagement 标记中声明的依赖项内工作,只要它们不属于 &lt;scope&gt;import&lt;/scope&gt; (仅适用于 &lt;type&gt;pom&lt;/pom&gt;) (3认同)