2012-04-13 57 views
0

我有一个模块X依赖于第三方库,而这依赖于apache-commons-collections 2.1。依赖两个版本的Jar

在模块X中,我想使用最新的apache-commons-collections 3.0,它有一些比2.1更多的方法。如果我添加一个依赖到3.0,我猜这会造成一个问题,因为类加载器只是拾取它在类路径中看到的第一个类。有没有解决这个问题的好方法?

感谢, 小号

回答

0

只需添加依赖到3.0到您的项目,它会更喜欢它在旧版本的2.1。为了明确你可以添加一个排除。无论如何,请使用依赖插件以及分析和树目标来查看正在发生的事情。

长话短说......这种情况一直发生,并且会很好,无论如何你可以控制发生的事情。

1

恕我直言,没有真的没有额外的模块化解决方案(如Java EE的EAR或OSGi)的好方法。不过,我想你只是问简单的web(或不)模块,直接使用这个第三方lib。恐怕你必须手动解决这个冲突。如果事实如此,Maven将不会提供commons-collections的2个版本,并且依赖于类加载器的分辨率,而是解析依赖关系图并选择它猜测的版本,这对于您的POM的声明是更好的。这意味着,如果声明模块X依赖commons-collections版本3.0,则会使用该版本,因为此声明比某些第三方库的依赖关系更重要。

这是Java平台本身的一个严重问题,它包含着名的JAR地狱之类的问题。不幸的是,选择并声明commons-collections版本可以满足你和你的第三方库的需求。