二
在第一部分我們討論調用java編譯器的最容易的方法
使用StandardJavaFileManager需要兩步
在使用這種方法調用Java編譯時最復雜的方法就是getTask
getTask(Writer out
DiagnosticListener diagnosticListener
Iterable options
Iterable classes
Iterable compilationUnits)
這些參數大多數都可為null
·out:
·fileManager:
·diagnosticListener: 編譯器的默認行為
·options: 編譯器的選項
·classes
最後一個參數compilationUnits不能為null
在使用完getTask後
Iterable getJavaFileObjectsFromFiles(
Iterable files)
Iterable getJavaFileObjectsFromStrings(
Iterable names)
String[] filenames = …;
Iterable compilationUnits =
fileManager
JavaCompiler
diagnostics
最後需要關閉fileManager
下面是一個完整的演示程序
import java
import java
import javax
public class test_compilerapi
{
private static void compilejava() throws Exception
{
JavaCompiler compiler = ToolProvider
// 建立DiagnosticCollector對象
DiagnosticCollector diagnostics = new DiagnosticCollector();
StandardJavaFileManager fileManager = compiler
// 建立用於保存被編譯文件名的對象
// 每個文件被保存在一個從JavaFileObject繼承的類中
Iterable compilationUnits = fileManager
JavaCompiler
diagnostics
// 編譯源程序
boolean success = task
fileManager
System
}
public static void main(String args[]) throws Exception
{
compilejava();
}
}
[
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27242.html