[英]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.