Java Classloader-如何引用Jar的不同版本

这是一个普遍的问题。我正在使用2个库 和 ,它们取决于同一jar的不同版本。

假设在运行时我需要

MY.jar   

-> A.jar -> THIS.1.0.0.jar

-> B.jar -> C.jar -> THIS.5.0.0.jar

我可以针对其依赖项编译特定的jar(A.jar / B.jar),但在运行时我只需要加载1个版本。哪一个?

仅加载1个依赖关系(最新版本)意味着,如果库不是向后兼容的,那么我的代码可能会抛出运行时异常(那里有向后兼容的库吗?)。

无论如何,我知道像OSGi这样的东西可以解决此问题。

我想知道解决这种问题的旧方法是什么…

非常感谢

回答:

您提到的“旧方法”(并且OSGI肯定会在幕后使用)是为依赖项的两个分支安装自己的ClassLoader。例如,这就是应用程序服务器能够在同一JVM中同时运行同一应用程序的旧版本和新版本的方式。

了解有关类加载器层次结构的信息。

在您的设置中,棘手的部分是连接点,两个分支的类在这里汇合。两个分支都不能使用加载到另一个分支中的类。使其工作的方法是确保仅将引导类加载器(JRE类)或MY.jar的类加载器加载的类传递到两个分支。

以上是 Java Classloader-如何引用Jar的不同版本 的全部内容, 来源链接: utcz.com/qa/406614.html

回到顶部