类加载器:如何加载不同版本的JAR

本文介绍了类加载器:如何加载不同版本的JAR的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!,我必须使用第三方平台,但该平台有无法替换的JARlibjar-1.0.0.jar旧版本。该平台允许我在其上运行我自己的(平面文件)包。我将libjar-2.0.0.jar的新版本放在我的包/包/包名称/外部-jar下。当我使用URLClassLoader加载libjar-2.0.0.jar,然后打印出所有声明的方法时,我能够看到2.0.0JAR中的方法。然而,当我调用时,我总是得到NoSuchMethodException。当我打印newobj.class.getProtectionDomain().getCodeSource().getLocation().toString()时,总是显示libjar-1.0.0.jar。谁能解释一下我做错了什么,以及我需要做些什么才能在运行时强制使用特定JAR中的类?,以下是我的代码的快照,URLClassLoader用于加载应用程序类路径中尚未指定的类。,类加载遵循委托原则。如果类未加载,则类加载器将加载类的任务委托给其父类加载器。如果父类加载器未找到该类,则会将其传递给子类加载器以加载类。
在您的例子中,URLClassLoader将类加载委托给其父级,即Application Class Loader
Application Class Loaderlibjar-1.0.0.jar中查找类。因此,URLClassLoader最终不从libjar-2.0.0.jar加载类。,这里是一个扩展URLClassLoader的自定义类加载器的简单示例。这个类加载器在委托给它的父类加载器之前尝试从它的URL加载类。它应该能够加载示例中所需的不同版本的JAR。您将找到一个带有单元测试的完整示例here。,P.S.Java 9中的类加载已更改。Java 9未对其进行测试,因此可能无法正常工作。,这篇关于类加载器:如何加载不同版本的JAR的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,
返回顶部
跳到底部

Copyright 2011-2024 南京追名网络科技有限公司 苏ICP备2023031119号-6 乌徒帮 All Rights Reserved Powered by Z-BlogPHP Theme By open开发

请先 登录 再评论,若不是会员请先 注册