gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:02:04 25 4
gpt4 key购买 nike

这是一个常见问题。我正在使用 2 个库 A.jarB.jar,它们依赖于同一个 jar 的不同版本。
假设在运行时我需要 THIS.x.x.x.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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1553567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com