Java 动态加载 JAR:NoClassDefFoundError

Java loading JAR dynamically: NoClassDefFoundError

假设我有一个主 class 应用程序,它使用 URLClassLoader:

加载子目录 plugins 中的所有 jar
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());
        }
    }
}

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

+-- Main.jar
|    +-- App.class
|    +-- Plugin.class
|
+-- Plugins/
|    +-- PluginTest.jar
|         +-- plugintest
|              +-- PluginTest.class
|              +-- Two.class

如果我只在 PluginTest class 中编写代码,那一切都很好。但是当我尝试从 PluginTest 访问 Two 时,我遇到了一个大错误:

Exception in thread "Thread-4" java.lang.NoClassDefFoundError: plugintest/Two
[...]

我应该如何正确加载 class?需要帮忙!谢谢

不要关闭类加载器。

删除 cl.close();声明。