簡體   English   中英

使用JavaCompiler API進行Java代碼編譯和編譯錯誤處理

[英]Java code compilation using JavaCompiler API and compilation errors 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<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()) {
    // 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM