使用JavaCompiler API进行Java代码编译和编译错误处理

时间:2013-12-25 10:30:04

标签: java compilation

我有以下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中解析的编译错误。获取文件名,行号,错误原因和代码行,还是必须进行解析?

1 个答案:

答案 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()) {
    // 
}