Bukkit - 不能在插件中使用外部jar

时间:2015-02-24 21:06:43

标签: java jar classpath minecraft bukkit

我正在为我的bukkit服务器制作一个插件,我无法使用我的外部库,因为服务器在加载时会抛出NoClassDefFound异常,这是因为我使用的是不是Bukkit的外部库插件本身,它真的沙哑我的jimmies。我真的需要这些库,因为没有它们,插件将无法工作。

库:
Json简单
Google GSON(Just for Pretty Print,JSON-Simple很难看)
Apache Commons
我的自定义PacketBuffer库。

那么,有什么方法可以将它们添加到类路径或类似的东西,以便它们在Bukkit中工作?我真的需要知道这一点,否则,我的发展将会戛然而止。

P.S。如果您需要堆栈跟踪或其他任何内容,请告诉我并将其放入此处:D

1 个答案:

答案 0 :(得分:-1)

简单的JSON和GSON内置Bukkit,不确定Apache Commons。 如果你想将库加载到插件/服务器,你可以用反射“破解”它。

将库jar文件放在插件可访问的地方,并使用loadFile()方法加载库文件。

public static void loadFile(File file) throws IOException {
    invokeLoader(file.toURI().toURL());
}

public static void invokeLoader(URL url) throws IOException {
    final URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
    final Class<?> sysclass = URLClassLoader.class;

    try {
        final Method method = sysclass.getDeclaredMethod("addURL", new Class[] { URL.class });

        method.setAccessible(true);
        method.invoke(sysloader, new Object[] { url });
    } catch (Throwable t) {
        t.printStackTrace();

        throw new IOException("Could not add URL to system class loader!");
    }
}