有兩種方式使用這種工具. 一種是簡單的,一種是稍微復雜點但擁有更多選項的. 你首先將會用較簡單的一種去編譯 "Hello, World"程序,就是下面的這個:
public class Hello {
public static void main(String args[]) {
System.out. }
}
要想從Java程序里調用Java編譯器,你需要訪問JavaCompiler 接口. 除此外,通過訪問這個接口,你可以設置源代碼的路徑,classpath,和目標目錄. 通過指定可編譯的文件為 JavaFileObjectinstance ,你可以將它們全部編譯. 然而,你并不需要對 JavaFileObject 了解多少.
可以使用 ToolProvider 類去請求 theJavaCompiler 接口的缺省實現. 這個 ToolProvider 類提供了一個 getSystemJavaCompiler() 方法, 它返回一個 JavaCompiler 接口的實例.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
使用 JavaCompiler 運行編譯最簡單的方法是調用在這個接口工具里定義的 run() 方法,它的實現是:
int run(InputStream in,
OutputStream out,
OutputStream err,
String... arguments)
分別為前三個缺省參數 System.in, System.out, and System.err 傳入 null 值. 參數集 String 對象表示著傳入編譯器的文件的名稱.
這樣,你應該像下面這樣去編譯前面顯示的 Hello 源程序:
int results = tool.run(null, null, null, "Hello.java");
假設沒有編譯錯誤,這樣會在目標目錄里產生一個 Hello.class文件. 假如這里有錯誤, run() 方法會把它輸出到標準錯誤輸出流里,也就是 run() 方法的的第三個參數. 當錯誤發生時這個方法返回一個非0的結果.
你可以使用下面的代碼去編譯 Hello.java 源文件:
import java.io.*;
import javax.tools.*;
public class CompileIt {
public static void main(String args[]) throws IOException {
JavaCompiler compiler =
ToolProvider.getSystemJavaCompiler();
int results = compiler.run(
null, null, null, "Hello.java");
System.out.println("Result code: " + results);
}
}
一旦你編譯了 CompileIt 一次 ,你就可以多次運行它,當你修改了 Hello.java源程序時或者要重新編譯它,你不需要重新編譯 CompileIt . 假如沒有錯誤,運行 CompileIt 會產生下面的輸出:
> java CompileIt
Result code: 0
運行 CompileIt 同樣也會在相同的目錄下產生一個 Hello.class 文件:
> ls
CompileIt.class
CompileIt.java
Hello.class
Hello.java
新聞熱點
疑難解答