2014-02-18 119 views
3

我有一个项目,这是在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编译的,所以这里没有问题。

但现在我有自己的项目中,这是用Java编写6.现在,我想我的覆盖B.依赖的依赖的问题是,即使我在项目中排除C-7,并添加依赖于C-6,当我在项目B中调用方法时,它将从C-7中获得类。因此,我的应用程序崩溃,因为它不兼容。

我该如何解决这个问题?我如何告诉我的依赖项B使用不同于通常依赖的依赖项C?请记住,很多项目都使用项目B作为依赖关系,所以我不希望更改任何涉及更改其他项目的任何内容。

回答

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> 
+0

我理解这一点。但是,如果在项目B上使用exclude和include标记来包含/排除C-6,则项目A可以访问C-6功能,但是当您在项目B上调用方法时,它将调用C-7方法。我在帖子中也解释了这一点。 – Joetjah

+0

你能解释一点,因为我有点困惑。据我了解:你有A - > B - > C7,并且你想A - > B - > C6。所以,如果你做A→C6&A→B x→C7,那么这应该从类路径中排除C7并将C6放在类路径上。 ( - >是一个依赖项,x->是一个排除项)。所以,排除依赖于B,而不是A,这是我认为你的问题所指出的。 –

+0

不完全。你说明我想要什么是正确的。但问题是,我不能排除B中的任何东西,除非我可以用(默认)配置文件或类似的东西做一些事情。关键是,我正在研究项目A.还有一些团队正在研究W,X,Y,Z ......,它们在项目A的依赖关系层次结构(也就是客户端)方面都是一样的。所以我可以'只是在项目B中排除,因为这会打破所有其他应用程序。 – Joetjah