使用Bukkit-API我正在尝试创建一个插件,它可以在运行时编译给定pastebin链接的java代码并执行该代码。到目前为止,一切都在工作,除了一件事:当我试图访问其中一个已经加载的插件时,我得到一个ClassNotFoundException。 (当我使用Bukkit-API方法时,我没有得到异常!) 所有插件jar都已添加到类路径中;它目前看起来像这样:
/home/cubepanel/test-network/jars/craftcubbit.jar:/home/cubepanel/test-network/servers/ProHub/plugins/MultiCubeHub.jar:/home/cubepanel/test-network/servers/ProHub/plugins/MultiCubeCore.jar:
我尝试动态加载的类:
MutliCube的ClassNotFoundException
import be.multicu.core.MultiCube;
public class Test{
public void debug() {
System.out.println(MultiCube.getInstance());
}
}
工作
import org.bukkit.Bukkit;
public class Test{
public void debug() {
System.out.println(Bukkit.getClass().getName());
}
}
RuntimeCompiler.java的源代码:http://paste.multicu.be/axigofekip.avrasm(这有点长,这就是我使用pastebin链接的原因)
我还注意到,当我删除MultiCube.jar的类路径时,我收到了编译错误,这意味着类路径必须正确,因为源代码可以编译。
编辑:我能够通过在URLClassLoader的构造函数中添加MultiCube.class.getClassLoader()作为参数来修复它