子POM是否可以继承父POM中定义的依赖排除项?

6

我不确定Maven是否支持这个。感谢您提供的任何帮助。

我有一个父POM定义了一个依赖和一个排除。我不能更改父POM:

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>1.0</version>
    <exclusions>
        <!-- this exclusion needs to be inherited by all children -->
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </exclusion>
    </exclusions>
</dependency>

然后在子pom中,我需要排除一个来自父级依赖的不同的依赖项。如下:

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>1.0</version>
    <exclusions>
        <!-- this exclusion is just for the child -->
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

但是,如果我这样做,孩子会被排除(正确地)slf4j jar,但是除非我在该依赖项的子声明中重新声明父级排除,否则它将不会有spring-cloud-config-server jar被排除。
我意识到我可以只是复制它,但那很凌乱,我也意识到将孩子的排除推到父级很容易,但那么我将强制所有其他孩子进行排除。
我想要的是Maven在父级和子级中以不同方式声明相同的依赖项时合并依赖项排除信息。
这可能吗?

这个问题可以通过在父项目中使用dependencyManagement来正确处理,但你说你不能改变父项目...在你的情况下,你必须复制排除项...此外,原始项目在仅使用slf4j而不是仅使用slf4j-api并让用户决定应该使用哪个真正的实现方面做错了一些事情... - khmarbaise
可能会起作用。我说我不能改变它,但实际上我只是不能强制使用log4j2的父级。我可以尝试更改父级以使其 less intrusive。我会试一试。 - Daniel Hannum
你能澄清一下如何在dependencyManagement中使用吗?你是说我应该将排除放在dependencyManagement部分中,然后它会向下传播吗? - Daniel Hannum
1个回答

5

在您的父Pom文件中:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>foo</groupId>
            <artifactId>bar</artifactId>
            <version>1.0</version>
            <exclusions>
                <!-- this exclusion needs to be inherited by all children -->
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-config-server</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>

在你的子POM中:
<dependencies>
    <dependency>
        <groupId>foo</groupId>
        <artifactId>bar</artifactId>
        <exclusions>
            <!-- this exclusion is just for the child -->
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接