Java 如何管理图书馆冲突?(同一软件包,不同版本)

Java 如何管理图书馆冲突?(同一软件包,不同版本),java,dependencies,classpath,Java,Dependencies,Classpath,相关的: 还涉及: 我有两个jar文件,每个jar文件都包含它自己的依赖项,但它们的版本不同 a.jar->has c.class/c2.class/c3.class/。。it中的0.3版 b.jar->has c.class/c2.class/c3.class/。。it中的1.0版 但是当我试图在同一个项目中使用这两种方法时。它似乎只使用一个jar中的c.class,而不使用另一个jar中的c.class。这是一个问题,因为这两个版本的API非常不同。是否有任何方法可以告诉他们仅从其各自的ja

相关的:

还涉及:

我有两个jar文件,每个jar文件都包含它自己的依赖项,但它们的版本不同

a.jar->has c.class/c2.class/c3.class/。。it中的0.3版

b.jar->has c.class/c2.class/c3.class/。。it中的1.0版

但是当我试图在同一个项目中使用这两种方法时。它似乎只使用一个jar中的c.class,而不使用另一个jar中的c.class。这是一个问题,因为这两个版本的API非常不同。是否有任何方法可以告诉他们仅从其各自的jar中使用c.class?我不能在这里修改a.jar和b.jar

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

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

最快的方法:

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


顺便说一句,这不是你的错。无论你从谁那里得到这些JAR,他们都是白痴,因为他们在发布版本中包含了外部依赖项,他们不应该这样做。

谢谢,我尝试了你的解决方案,它奏效了,尽管与我最初的目标(分离他们的环境)有点不同。顺便说一句,这些程序起源于生物医学领域,在生物医学领域,正常的软件实践几乎不存在。我认为我们应该勤勉地交叉验证JAR,确保它只服务于我们的利益。相关问题: