java - 在 Maven 中,如何排除来自父项目的依赖项?

例如我有2个Maven项目,一个是"项目parent,另一个是"项目child ,显然,"项目child是"项目parent的子项目。

"项目父"有Log4J的依赖关系,但是我想把它从项目-child中排除,有什么方法?

提前致谢。

时间:

我认为在Maven2中没有实现这一点的方法,因为这就是POM继承的目的,不过,我可以想到的一个技巧是:

假设你有权限将工件上传到你的内部存储库中,你可以创建一个空JAR,将它部署为log4j:log4j,显然这是古怪的版本(例如。log4j:log4j:9999 ),在项目-child中添加这样的依赖项。那么它将覆盖parent-项目的依赖关系,取决于事实上空的JAR。

实际上我不知道的办法排除一个依赖项,但可以将其排除在目标分发,但它有点hack 。 你需要更改依赖关系,以一个你能排除在最终的范围分布。

所以,说我父母有了pom中依赖junit 4 .8,你说:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8</version>
    <scope>provided</scope>
</dependency>

所以我们将范围更改为提供。 有关该步骤的工作原理的说明,请参见我的回答 NoClassDefFoundError:? 注释处理期间org/junit/AfterClass 。 不幸的是,这并不影响生成,但当你要复制的依赖关系,最终分发,可以使用 excludeScope配置元素不会将依赖项复制到最终分发:

<plugin>
<artifactId>maven-dependency-plugin</artifactId>

<executions>
    <execution>
        <id>copy-libs</id>
        <phase>package</phase>
        <goals>
            <goal>copy-dependencies</goal>
        </goals>
        <configuration>
            <outputDirectory>${project.build.directory}/lib</outputDirectory>
            <excludeScope>provided</excludeScope>
        </configuration>
    </execution>

如果我不明白这个问题,你需要的是类似下面的。 零它项中的依赖,然后添加到其依赖关系列表中包含相应的依赖项。 通常,指定的位置是否要放入新版本的软件包,而不是其他软件包中引用的规范。

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.15</version>
    <exclusions>
        <exclusion>
            <groupId>com.sun.jmx</groupId>
            <artifactId>jmxri</artifactId>
        </exclusion>
        ...
    </exclusions>
    ...

如果你不要谈的时候 <parent>那么我不确定关系可以通过某种方法来执行此操作。 你可以从做一个切换 <parent><dependency>?

...