【发布时间】:2012-01-12 10:24:07
【问题描述】:
相关:manage conflict on java classpath
也相关:Java Classloader - how to reference different versions of a 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
但是当我尝试在同一个项目中同时使用它们时。似乎它只使用一个罐子中的 c.class 而不是另一个罐子。事实证明这是一个问题,因为两个版本的 API 都非常不同。有没有办法告诉他们只从其各自的 jar 中使用 c.class ?我不能在这里修改 a.jar 和 b.jar。
顺便说一句。快速搜索后,似乎人们建议使用 OSGI 和类加载器,但我对此几乎一无所知,这应该是处理它的最快方法吗? (已经阅读了一些关于类加载器的内容,但仍然不知道如何使用它)。
编辑:我更喜欢使用它们捆绑的原始库,因为我已经分别评估了这两个 jar(它们是具有相同后端的文本挖掘工具,但版本非常不同)。现在我想把两者合二为一,尽量让环境接近原始。 现在我遵循 Travis Webb 的解决方案,但我仍然想知道为什么 jar 不分离两组库。
【问题讨论】:
标签: java dependencies classpath