これにはjavax.toolsAPIが必要です。したがって、動作させるには、少なくともJDKをインストールする必要があります(そして、IDEがJREの代わりにJDKを指すようにします)。基本的なキックオフの例を次に示します(基本的な例の不透明度を下げるための適切な例外とエンコーディング処理を除いて、咳をします)。
public static void main(String... args) throws Exception {
String source = "public class Test { static { System.out.println(\"test\"); } }";
File root = new File("/test");
File sourceFile = new File(root, "Test.java");
Writer writer = new FileWriter(sourceFile);
writer.write(source);
writer.close();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName("Test", true, classLoader);
}
これはtest
、テストソースコードの静的初期化子によって行われるように、stdoutで出力されるはずです。それらのクラスがすでにクラスパスにある特定のインターフェースを実装している場合、さらに使用するのはより簡単です。それ以外の場合は、メソッド/フィールドにアクセスして呼び出すためにReflectionAPIを使用する必要があります。