Bukkit-API を使用して、実行時に特定のペーストビン リンクの Java コードをコンパイルし、そのコードを実行できるプラグインを作成しようとしています。1 つのことを除いて、これまでのところすべてが機能しています。既に読み込まれているプラグインの 1 つにアクセスしようとすると、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:
動的にロードしようとしたクラス:
MultiCube の 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 のクラスパスを削除するとコンパイル エラーが発生することにも気付きました。これは、ソースコードをコンパイルできるため、クラスパスが正しい必要があることを意味します。
編集: MultiCube.class.getClassLoader() を URLClassLoader のコンストラクターの引数として追加することで修正できました