使用JavaCompiler API进行Java代码编译和编译error handling

我有以下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实例返回。

有没有办法得到编译错误解析id获取文件名,行号,错误原因和代码行或我是否必须进行解析?

根据我对JavaCompiler.getTask(..)理解,我建议添加一个DiagnosticListener 。 它似乎提供了所需的所有细节。


这是我一直在寻找的代码:

 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); DiagnosticCollector diagnostics = new DiagnosticCollector(); StandardJavaFileManager fileManager = compiler. getStandardFileManager(diagnostics, null, null); Iterable 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()) { // }