首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态加载JAR : NoClassDefFoundError

动态加载JAR : NoClassDefFoundError
EN

Stack Overflow用户
提问于 2017-07-04 14:11:51
回答 1查看 209关注 0票数 0

假设我有一个主类App,它使用URLClassLoader加载子目录插件中的所有jars:

代码语言:javascript
复制
public class App(){
    public static void main(String[] args){
        for(File f : new File("plugins").listFiles()){
                URL[] urls = { new URL("jar:file:" + "plugins/" + f.getName() + ".jar" + "!/") };
                URLClassLoader cl = URLClassLoader.newInstance(urls);

                Class<?> clazz = cl.loadClass(f.getName().toLowerCase()+"."+f.getName());
                cl.close();
                Plugin p = ((Plugin) clazz.newInstance());
        }
    }
}

所有这些jars都包含一个实现接口插件的类。

代码语言:javascript
复制
+-- Main.jar
|    +-- App.class
|    +-- Plugin.class
|
+-- Plugins/
|    +-- PluginTest.jar
|         +-- plugintest
|              +-- PluginTest.class
|              +-- Two.class

如果我只在PluginTest类中编写代码,这一切都很好。但是,当我试图从PluginTest访问两个文件时,我会发现一个很大的错误:

代码语言:javascript
复制
Exception in thread "Thread-4" java.lang.NoClassDefFoundError: plugintest/Two
[...]

如何正确加载类?需要帮助!谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-04 14:16:18

不要关闭类加载器。

删除cl.close();语句。

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

https://stackoverflow.com/questions/44908226

复制
相关文章

相似问题

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