2014-03-30 55 views
0

我已2个不同的模块称为A和B.我有也被称为C.如何解决依赖版本冲突?

另一个模块

A使用C版1.0

B使用C版2.0

的问题是,因为C 2.0是不向后兼容,即使group1d和artifactId值对于C 1.0和C 2.0是相同的,我不能在我的pom.xml中排除其中的一个,并使用另一个用于A和B.因此,排除标记在此不起作用案件。我需要将依赖注入到特定模块。

我发现我可以使用OSGI来达到这个目的,但是我无法让它工作。如果你有任何的OSGI教程或其他解决方案,它会很好。

+1

OSGi是一个**大型**大锤在这种情况下破解橡子。只需排除依赖关系并包含所需的特定版本即可。 –

+0

@BoristheSpider有什么方法可以在一个项目中使用两个不同版本的软件包?包A只是一个jar包,我不能(不应该)修改它。另一方面,C 2.0支持需要在包B中使用的新功能。 – Mehmet

+1

您知道使用不同的类加载程序 –

回答

1

如果不在Web应用程序服务器中运行,在没有使用OSGI的情况下,为了在单独的WAR文件上运行A和B应用程序有重构应用程序的替代方案。

这样WAR 1包含A和C 1.0,WAR 2包含B和C 2.0,在这种情况下不存在干扰。

+0

它是一种经典的Java应用程序,而不是Web应用程序。 AFAIK WAR选项仅适用于servlet。 – Mehmet

+0

然后,如果可能的话,另一种方法是将其分为两个独立的应用程序,否则最好从OSGI容器中运行,其中应用程序是依赖于不同C的不同捆绑版本的两个捆绑包。您将需要tu捆绑C如果软件包不可用,你自己。看看Apache Karaf轻量级OSGI容器https://karaf.apache.org/ –

1

在项目A和/或B上尝试Maven Shade pluginrelocation。这将在您的项目中包含C类。而且因为C获得了不同的包装路径,所以不会再有任何类别冲突。