我有以下Java代码,它使用javax.tools.JavaCompiler
API编译给定的Java代码:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
ByteArrayOutputStream err = new ByteArrayOutputStream();
compiler.run(new FileInputStream("Test.java"),
new FileOutputStream("Test.class"),
err,
"Test.java"); // Test.java contains the code of a simple Java class
String compilationErrors = err.toString();
在上面的代码中,所有编译错误都作为一个String
实例返回。
有没有办法解决i.d中解析的编译错误。获取文件名,行号,错误原因和代码行,还是必须进行解析?
答案 0 :(得分:3)
根据我对JavaCompiler.getTask(..)
的理解,我建议添加DiagnosticListener
。它似乎提供了所需的所有细节。
这是我一直在寻找的代码:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics =
new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.
getStandardFileManager(diagnostics, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.
getJavaFileObjectsFromFiles(Arrays.asList(new File("Test.java")));
CompilationTask task = compiler.getTask(null, fileManager, diagnostics,
null, null, compilationUnits);
task.call();
for(Diagnostic<?> error : diagnostics.getDiagnostics()) {
//
}