我有一个项目A,它是用Java6编译的,这取决于项目B,它也是用Java6编译的。
除了这些,我还有两个项目,C-6和C-7。C-6是用Java6编译的项目C,而C-7是用Java7编译的。
项目B依赖于项目C。默认情况下,项目B引用项目C-7,这意味着它使用项目C的Java 7版本。有很多不同的项目引用项目B,它们都是用Java 7编译的,所以这里没有问题。
但现在我有了我的项目A,它是用Java 6编译的。现在我想覆盖我的依赖项B的依赖项。问题是,即使我在项目A中排除了C-7并在C-6中添加了依赖项,当我调用项目B中的方法时,它也会从C-7中获取类。因此,我的应用程序崩溃,因为它不兼容。
我该如何解决这个问题呢?我如何告诉我的依赖项B使用一个不同于它通常依赖的依赖项C?请记住,许多项目使用项目B作为依赖项,因此我不喜欢更改任何涉及更改其他项目的内容。
发布于 2014-02-20 00:44:57
在给定的依赖项中,可以使用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>https://stackoverflow.com/questions/21858998
复制相似问题