gpt4 book ai didi

Java动态加载JAR : NoClassDefFoundError

转载 作者:行者123 更新时间:2023-12-02 12:41:25 29 4
gpt4 key购买 nike

假设我有一个主类应用程序,它使用 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 都包含一个实现接口(interface) Plugin 的类。

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

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

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

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

最佳答案

不要关闭类加载器。

删除cl.close();语句。

关于Java动态加载JAR : NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44908226/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com