首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URLClassloader依赖项

URLClassloader依赖项
EN

Stack Overflow用户
提问于 2013-05-07 03:01:04
回答 2查看 1.3K关注 0票数 3

在前面的问题中,我询问了如何加载远程jar文件。我当前的代码是:

代码语言:javascript
复制
//f is the path to the jar
URLClassLoader loader = new URLClassLoader(new URL[]{f.toURI().toURL()});
Class<?> jarClass = Class.forName(main, true, loader);
Class<? extends Module> module = jarClass.asSubclass(Module.class);

Constructor<? extends Module> constructor = module.getConstructor();
System.out.println(constructor);

Module module = constructor.newInstance();

这工作得很好,但是远程加载的模块扩展了加载它们的jar中的一个类,这会给出这个错误:

原因: java.lang.ClassNotFoundException: package.whatever.Module,我认为这是因为它使用的是URLClassLoader而不是getClass().getClassLoader()..怎样才能让它使用URLClassLoader,然后回退到默认的呢?

谢谢,

巴特

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-07 04:22:01

您可以将应用程序类加载器设置为url类加载器的父类:

代码语言:javascript
复制
URLClassLoader loader = new URLClassLoader(
       new URL[]{f.toURI().toURL()}, Module.class.getClassLoader());

Oracle Java tutorial (类加载机制)中:

平台使用委托模型来装入类。基本思想是每个类加载器都有一个“父”类加载器。装入类时,类装入器在尝试查找类本身之前,首先将搜索类的任务“委托”给它的父类装入器。

票数 2
EN

Stack Overflow用户

发布于 2018-03-13 19:08:20

我遇到了同样的问题,我使用Java 9,将它降级到Java 8解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16405388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档