mic*_*son 19 java dependencies versions jar classloader
这是一个常见问题.我正在使用2个库A.jar和B.jar,这些库依赖于同一个jar的不同版本.
假设在运行时我需要THIS.xxxjar
MY.jar
-> A.jar -> THIS.1.0.0.jar
-> B.jar -> C.jar -> THIS.5.0.0.jar
Run Code Online (Sandbox Code Playgroud)
我可以针对它的依赖编译特定的jar(A.jar/B.jar)但是在运行时我只能加载1个版本.哪一个?
仅加载1个依赖项(最新版本)意味着如果库不是向后兼容的,那么我的代码可能会抛出运行时异常(那里有向后兼容的库吗?).
无论如何,我知道像OSGi这样的东西可以解决这个问题.
我想知道解决这类问题的旧方法是什么......
非常感谢
你提到的"旧方法"(以及OSGI当然使用的一种方法)是为依赖关系的两个分支安装自己的ClassLoader.例如,应用程序服务器就能够在同一个JVM中运行相同应用程序的较旧版本和较新版本.
阅读类加载器层次结构.
在您的设置中,棘手的部分是关节点,两个分支的类在这里相遇.两个分支都不能使用加载到另一个分类中的类.使其工作的方法是确保只有引导类加载器(JRE类)或MY.jar的类加载器加载的类才传递给两个分支.
| 归档时间: |
|
| 查看次数: |
9910 次 |
| 最近记录: |