如何管理图书馆冲突? (相同包装,不同版本)

时间:2011-12-04 01:00:27

标签: java dependencies classpath

相关:manage conflict on java classpath

也相关:Java Classloader - how to reference different versions of a jar

我有两个jar文件,每个jar文件都有自己的依赖项,包含在jar文件中,但两者都有不同的版本。

a.jar -> has c.class/c2.class/c3.class/.. version 0.3 in it

b.jar -> has c.class/c2.class/c3.class/.. version 1.0 in it

但是当我尝试在同一个项目中使用它们时。看起来它只使用一个jar中的c.class而不是另一个jar。这是一个问题,因为API在两个版本中都非常不同。反正告诉他们只是从它各自的罐子里使用c.class?我不能在这里修改a.jar和b.jar。

顺便说一句。在快速搜索之后,人们似乎建议使用OSGI和类加载器,但我几乎一无所知,它应该是处理它的最快方法吗? (已经阅读了一下有关类加载器的内容,但仍不确定如何使用它。)

编辑:我更喜欢使用他们捆绑的原始库,因为我已经分别评估了这两个jar(它们是具有相同后端的文本挖掘工具,但版本非常不同)。现在我想将它们集成到一个中,并尽可能使环境接近原始环境。 现在我按照Travis Webb的解决方案,但我仍然想知道为什么jar不会将这两个库分开。

1 个答案:

答案 0 :(得分:3)

最快的方式:

提取a.jar,删除你不想要的东西,并重新制作它。 JAR与zip文件相同,这意味着您只需创建一个普通的zip文件并将其重命名为.jar

不过,这不是你的错。你从这些罐子里拿到这些罐子的人都是白痴,因为他们在发布过程中包含了外部依赖,他们不应该这样做。