调用 JavaCompiler.run() 时未找到 javac 文件

问题描述 投票:0回答:1

我正在尝试使用 JavaCompiler.run() 来编译动态生成的源文件。 下面是我的程序,当我运行它时,我得到了 System.err:

javac:找不到文件:C:..bla..bla.. est\A.java C:..bla..bla.. est\B.java C:..bla..bla.. est\C .java 用法:javac 使用 -help 获取可能选项的列表

文件未编译,但当我输入命令提示符时,所有内容都已编译

javac C:..bla..bla.. est\A.java C:..bla..bla.. est\B.java C:..bla..bla.. est\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) 保存文件源并返回存储文件的完整路径。

java classloader javac java-compiler-api
1个回答
0
投票

我找到了解决方案,我应该这样调用 JavaCompiler.run():

compiler.run(null, null, null, pathA, pathB, pathC);

只需将源文件的每个路径作为单独的参数提供,而不是连接不同的路径并为 run() 提供单个参数! 我注意到通过 ToolProvider.getSystemJavaCompiler(). 提供的编译器并不支持所有 javac

选项(例如类路径)。
© www.soinside.com 2019 - 2024. All rights reserved.