假设您有一个项目(网络应用程序)使用 2 个第三方库 - A 和 B。
说A依赖另一个第三方库C的1.10版本。
假设 B 依赖于同一个第三方库 C 的 1.15 版本。
您应该将哪个版本的 C 放在您的 Web 应用程序项目的 lib 文件夹中?!
假设您不太了解 C,您不确定 C 1.15 是否与 1.10 兼容,或者类似的东西。
有没有办法将 A.jar 和 B.jar,以及两个 C jar 放在项目的 lib 文件夹中,但在运行时(例如在 Tomcat 或 JBoss 下)有 A 加载 C 1.10 jar,但有 B 加载C 1.15 jar 。
我不认为这是可能的,因为它们共享相同的网络应用程序类加载器(因此它会从 1.10 或从 1.15 加载 C 类,这几乎是不可预测的;两个 JAR 中的哪个恰好是第一个在类路径)......但我不确定。
如果确实不可能,那么处理此类冲突的最佳做法是什么?
最佳答案
可以提出两个解决方案- 1) 使用不同版本的 jar 为 A 和 B 编写类加载器。您可以将 C jar 文件放在 lib 和 Web 应用程序中的两个不同文件夹中。并使用不同的类加载器为 A 和 B 创建对象。这是一种切实可行的方法,但会奏效。
2) 虽然不确定,但 OSGI 可能会有所帮助。
关于java - JAR 版本依赖冲突 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28115414/