JavaCompiler.run()を使用して、動的に生成されたソース ファイルをコンパイルしようとしています。以下は私のプログラムです。実行すると、System.err が表示されます。
javac: ファイルが見つかりません: C:..bla..bla..\test\A.java C:..bla..bla..\test\B.java C:..bla..bla..\test \C.java 使用法: javac use -help 可能なオプションのリスト
ファイルはコンパイルされていませんが、コマンドプロンプトに入るとすべてがコンパイルされました
javac C:..bla..bla..\test\A.java C:..bla..bla..\test\B.java C:..bla..bla..\test\A.java
ここに完全なソースコードがあります
// define the classes
String stringA = "package test;" + " "
+ "public class A { "
+ "public A() { B b = new B(); b.b(); }" + " "
+ "public static boolean a() { return true;}" + " "
+ "}";
String stringB = "package test;" + " "
+ "public class B { "
+ "public B() { }" + " "
+ "public boolean b() { return new C().c(); }" + " "
+ "}";
String stringC = "package test;" + " "
+ "public class C { "
+ "public C() { }" + " "
+ "public boolean c() { return A.a(); }" + " "
+ "}";
// Save sources in .java files then compile
String pathA = store("test/A.java", stringA);
String pathB = store("test/B.java", stringB);
String pathC = store("test/C.java", stringC);
StringBuilder pathBuilder = new StringBuilder();
pathBuilder.append(pathA);
pathBuilder.append(" ");
pathBuilder.append(pathB);
pathBuilder.append(" ");
pathBuilder.append(pathC);
String files = pathBuilder.toString();
// run compiler
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, files);
...
store(filename, source) はファイル ソースを保存し、保存されたファイルへのフル パスを返します。