我正在尝试使用 JavaCompiler.run()来编译动态生成的源文件。 下面是我的程序,当我运行它时,我得到了System.err:
javac:找不到文件:C:.. bla..bla .. \ test \ A.java C:.. bla..bla .. \ test \ B.java C:.. bla..bla。 \测试\ C.java 用法:javac 使用-help获取可能的选项列表
文件未编译,但在我输入命令提示符时编译了eveything
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);
...
存储(文件名,源)保存文件源并返回存储文件的完整路径。
答案 0 :(得分:0)
我找到了解决方案,我应该用这种方式调用 JavaCompiler.run():
compiler.run(null, null, null, pathA, pathB, pathC);
只需将源文件的每个路径作为单独的参数提供,而不是将不同的路径连接起来并为 run()提供单个参数! 我注意到,并非所有 javac 选项都由 ToolProvider.getSystemJavaCompiler()提供的编译器支持(例如,类路径)。