覆盖依赖项的依赖项

时间:2014-02-18 16:01:53

标签: maven pom.xml

我有一个项目A,它是用Java 6编译的。这取决于项目B,它也是用Java 6编译的。

接下来,我有两个项目,C-6和C-7。 C-6是用Java 6编译的项目C,而C-7是用Java 7编译的。

项目B依赖于项目C.默认情况下,项目B引用项目C-7,这意味着它使用项目C的Java 7版本。有许多不同的项目引用项目B,它们都是在Java 7中编译,所以这里没有问题。

但是现在我有了我的项目A,它是用Java 6编译的。现在我想要覆盖我的依赖项B的依赖关系。问题是即使我在项目A中排除C-7并添加一个依赖项在C-6中,当我在项目B中调用一个方法时,它将从C-7中获得该类。因此,我的应用程序崩溃,因为它不兼容。

我该如何解决这个问题?如何告诉我的依赖关系B使用不同于它通常依赖的不同依赖关系?请记住,很多项目都使用项目B作为依赖项,因此我不想更改任何涉及必须更改其他项目的项目。

1 个答案:

答案 0 :(得分:0)

在给定的依赖项中,您可以使用exclusions标记来排除指定的依赖项。如果然后向项目添加兼容的依赖项,则此库将位于类路径而不是排除的依赖项。我们一直使用此功能来交换日志记录库。但是,该技术的价值有限,因为您放入的库必须实现与您取出的库相同的接口。就像我说的那样,这适用于日志记录,但对于其他大多数事情都不是很好。

它看起来像这样:

<dependency>
    <groupId>com.my.company</groupId>
    <artifactId>B</artifactId>
    <exclusions>
        <exclusion>C7</exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.my.company</groupId>
    <artifactId>C6</artifactId>
</dependency>