假设我有一个主类App,它使用URLClassLoader加载子目录插件中的所有jars:
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都包含一个实现接口插件的类。
+-- Main.jar
| +-- App.class
| +-- Plugin.class
|
+-- Plugins/
| +-- PluginTest.jar
| +-- plugintest
| +-- PluginTest.class
| +-- Two.class如果我只在PluginTest类中编写代码,这一切都很好。但是,当我试图从PluginTest访问两个文件时,我会发现一个很大的错误:
Exception in thread "Thread-4" java.lang.NoClassDefFoundError: plugintest/Two
[...]如何正确加载类?需要帮助!谢谢。
发布于 2017-07-04 14:16:18
不要关闭类加载器。
删除cl.close();语句。
https://stackoverflow.com/questions/44908226
复制相似问题