相关: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不会将这两个库分开。答案 0 :(得分:3)
最快的方式:
提取a.jar
,删除你不想要的东西,并重新制作它。 JAR与zip文件相同,这意味着您只需创建一个普通的zip文件并将其重命名为.jar
。