Java - 使用外部jar-archives和类(ClassLoader)

时间:2013-12-20 20:21:24

标签: java classloader

我为Java编写了一个非常简单的Web服务器接口,允许用户将自己的jar存档放入文件夹,当服务器启动时,它们将被加载。

该存档是一个定义主类等的文本文件,但我的插件加载器只加载文件中定义的类。因此,当我使用第二个类并想要访问它(Example e = new Example())时,它将导致NoClassDefFoundError - 异常:

Exception in thread "main" java.lang.NoClassDefFoundError: de/Ercksen/WebserverPlugin/Plugin/WasWillstDu
at de.Ercksen.WebserverPlugin.Plugin.MainPlugin.onEnable(MainPlugin.java:17)
at de.Ercksen.Webserver.Webserver.initPlugins(Webserver.java:236)
at de.Ercksen.Webserver.Webserver.loadPlugins(Webserver.java:231)
at de.Ercksen.Webserver.Webserver.execute(Webserver.java:37)
at de.Ercksen.Webserver.Webserver.main(Webserver.java:30)
    Caused by: java.lang.ClassNotFoundException:
    Ercksen.WebserverPlugin.Plugin.WasWillstDu
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 5 more

是否有一种方法可以简单地加载.jar-archive中的所有类?还是其他任何想法?

我的班级加载器:

@SuppressWarnings("unchecked")
public static Class<? extends Plugin> loadPluginClass(File file, String path) throws ClassNotFoundException, ClassCastException, IOException {
    URLClassLoader loader = new URLClassLoader(new URL[] {file.toURI().toURL()});
    Class<?> c = loader.loadClass(path);
    loader.close();
    return (Class<? extends Plugin>) c;
}

0 个答案:

没有答案