JAR版本依赖冲突 - Java

时间:2015-01-23 17:27:34

标签: java tomcat web-applications jar jboss

假设您有一个使用2个第三方库的项目(Web应用程序) - A和B. 说A取决于另一个第三方库C的版本1.10 说B取决于同一第三方库C的版本1.15。

您应该在Web应用程序项目的lib文件夹中放置哪个版本的C?

假设你不熟悉C,你不确定C 1.15是否与1.10兼容,或类似的东西。

有没有办法将A.jar和B.jar以及两个C jar放在项目的lib文件夹中,但是在运行时(例如在Tomcat或JBoss下)有一个A load C 1.10 jar,但有B加载C 1.15罐子。

我不认为这是可能的,因为他们共享相同的Web应用程序类加载器(因此它将从1.10或1.15加载C类几乎无法预测;两个JAR中的哪一个恰好是第一个classpath)...但我不确定。

如果确实不可能,那么处理这种冲突的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

可以建议两种解决方案 - 1)使用不同版本的jar为A和B编写类加载器。您可以将C jar文件放在lib中的两个不同文件夹中,也可以放在Web应用程序中。并使用不同的类加载器为A和B创建对象。这是一个有点实际的方法,但会起作用。

2)虽然不确定,但OSGI可能会有所帮助。