java - 如何管理库冲突? (相同的包,不同的版本)

标签 java dependencies classpath

相关:manage conflict on java classpath

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

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

a.jar -> 里面有 c.class/c2.class/c3.class/.. 版本 0.3

b.jar -> 里面有 c.class/c2.class/c3.class/.. 版本 1.0

但是当我试图在同一个项目中同时使用它们时。似乎它只使用一个 jar 而不是另一个 jar 中的 c.class。事实证明这是一个问题,因为两个版本中的 API 非常不同。有没有告诉他们只使用各自 jar 中的 c.class ?我不能在这里修改a.jar 和b.jar。

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

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

最佳答案

最快的方法:

提取a.jar,删除不需要的内容,然后重新打包。 JAR 与 zip 文件相同,这意味着您只需创建一个普通的 zip 文件并将其重命名为 .jar

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

关于java - 如何管理库冲突? (相同的包,不同的版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372439/

相关文章:

java - 使用 Google Guava 过滤 JavaBean 列表

java - 主页RequestMapping。 Spring MVC

java - 如何管理消费应用程序的 JAR 依赖项

java - 如何让 MigLayout 与我的项目配合使用?

Java - 删除文件夹及其内容

java - 使用 InputStream 读取文本文件

c++ - 如何处理必须按特定顺序调用的公共(public)函数的依赖项?

Linux - 找不到依赖项 libmysqlclient.so.15

java - 从 Bat 文件执行 Java 时包含 Jar

java - ant - 如何在类路径中包含 .java 文件