javac
javac是收錄於JDK中的Java語言編譯器。該工具可以將後綴名為.java的源文件編譯為後綴名為.class的可以運行於Java虛擬機的字節碼。
開發者 | 昇陽電腦 (母公司甲骨文公司) |
---|---|
當前版本 | 1.7.0_25(2013年7月18日 | )
編程語言 | Java |
操作系統 | 跨平台 |
類型 | 編譯器 |
許可協議 | GPL |
網站 | www |
使用方法
若開發者使用IDE編寫的源程序(擴展名為.java)必須遵從於「The Java Language Specification」,可手工編譯或IDE編譯。運行javac的實質便是命令行的調用:
- javac hello.java
即可生成對應的.class文件。這種文件遵從「The Java Virtual Machine Specification」。
需要注意的是,Java語言規範要求每個公共類所在的源代碼文件的文件名與其類名相同,除非這個類是一個嵌套類,而class文件所包含的類必須和class文件的文件名相同,包括嵌套類。javac編譯之後的class文件名會被自動命名為其中所包含的類的名字。
javac的命令行參數
javac [可按任意次序排列的options] [一个或多个要编译的sourcefiles] [一个或多个对源文件名进行列表的@files]
javac的具體幫助文檔見:[1]
命令行 | 解釋 |
---|---|
@<filename> | 示例 |
-Akey[=value] | 傳遞給annotation processors的選項 |
--add-modules <module>(,<module>)* | Root modules to resolve in addition to the initial modules, or all modules on the module path if <module> is ALL-MODULE-PATH. |
--boot-class-path <path>, -bootclasspath <path> | 覆蓋自舉bootstrap class files的路徑 |
--class-path <path>, -classpath <path>, -cp <path> | 指出在哪裡搜索class files。它將覆蓋CLASSPATH環境變量中的類路徑 |
-d <directory> | 指出產生的class files放在哪裡。如果產生的類是一個包的組成部分,則該class files放入對應於所在package的子目錄中。必要時創建目錄。若未指定 -d 選項,則 javac 將把class files放到與源文件相同的目錄中。 |
-deprecation | 顯示每種不被java語言規範鼓勵使用或覆蓋的成員或類的說明。沒有給出 -deprecation 選項的話, javac將顯示這類源文件的名稱:這些源文件使用或覆蓋不鼓勵使用的成員或類。 -deprecation是-Xlint:deprecation的簡寫 |
-encoding <encoding> | 指出源文件的字符編碼 |
-endorseddirs <dirs> | Override location of endorsed standards path |
-extdirs <dirs> | 覆蓋installed extensions的位置 |
-g | 生成所有的調試信息,包括局部變量。缺省情況下,只生成行號和源文件信息。 |
-g:{lines,vars,source} | 生成某些調試信息,如源文件調試信息、行號調試信息、局部變量調試信息 |
-g:none | 不生成任何調試信息 |
-h <directory> | 指出在哪裡放置生成的native header files |
--help, -help | 打印幫助信息 |
--help-extra, -X | 打印對額外選項的幫助信息 |
-implicit:{none,class} | 指出是否對implicitly referenced files生成class files。缺省值是class |
-J<flag> | 把<flag>直接傳給runtime system |
--limit-modules <module>(,<module>)* | 限制可看到的modules的範圍 |
--module <module-name>, -m <module-name> | 只編譯指定的module,檢查時間戳 |
--module-path <path>, -p <path> | 指出在哪裡搜索modules |
--module-source-path <module-source-path> | 指出對多個人modules在哪裡搜索源文件 |
--module-version <version> | 指出將被編譯的module的版本 |
-nowarn | 不產生警告信息 |
-parameters | 生成元數據用於reflection方法參數。構造函數與方法的形參名被存儲在生成的class file中,從而Reflection API的 java.lang.reflect.Executable.getParameters方法可以獲取它們 |
-proc:{none,only} | 控制annotation processing 與/或編譯被執行。none表示只編譯無annotation processing;only只annotation processing無隨後的編譯 |
-processor <class1>[,<class2>,<class3>...] | 將要運行的annotation processing的名字;跳過默認的發現過程 |
--processor-module-path <path> | 指出一個module路徑可以發現annotation processor |
--processor-path <path>, -processorpath <path> | 指出在哪裡可以發現annotation processors |
-profile <profile> | 在指定的profile中被用的API是可利用的 |
--release <release> | 針對特定版本虛擬機編譯。支持的目標版本: 10, 6, 7, 8, 9 |
-s <directory> | 指出在哪裡存放被生成的source files |
-source <release> | 指出源代碼遵從哪個版本的Java語言標準。必須大於5 |
--source-path <path>, -sourcepath <path> | 指定用來查找類或接口定義的源代碼路徑。與用戶class path一樣,源路徑項用分號 (;) 進行分隔,它們可以是目錄、JAR 歸檔文件或 ZIP 歸檔文件。如果使用包,那麼目錄或歸檔文件中的本地路徑名必須反映包名。注意:通過類路徑查找的類,如果找到了其源文件,則可能會自動被重新編譯。 |
none | 覆蓋系統module的位置 |
-target <release> | 生成將在指定版本的虛擬機上運行的類文件 |
--upgrade-module-path <path> | 覆蓋upgradeable modules的位置 |
-verbose | 輸出編譯器正在做的事情。包括了每個所加載的類和每個所編譯的源文件的有關信息 |
--version, -version | 版本信息 |
-Werror | 如果警告出現則停止編譯 |
參見
參考文獻
- ^ Java Platform, Standard Edition Tools Reference:javac. [2018-07-13]. (原始內容存檔於2018-05-15).
外部連結
- The Compiler Group (頁面存檔備份,存於網際網路檔案館)
- JSR 199 (頁面存檔備份,存於網際網路檔案館) Java Compiler API Java Specification Request for invoking the Java compiler from a Java program