javac [options] [sourcefiles] [@files]
# 別名 oldjavac 行為一致
options:編譯器選項,順序任意。sourcefiles:一個或多個 .java 文件路徑。@files:包含文件列表的文本文件,每行一個路徑,用 @filelist 引用。| 類別 | 選項 | 說明 |
|---|---|---|
| 目標版本 | -source | 源碼語言版本(如 1.8, 11, 17) |
| -target | 生成類文件版本(向後兼容) | |
| --release | JDK 9+ 一鍵設定 source/target/bootstrap | |
| -encoding | 源文件編碼(必加:UTF-8) | |
| 輸出控制 | -d | 類文件輸出根目錄(按包結構) |
| -s | 生成源碼輸出目錄(注解處理器用) | |
| -h | 生成 JNI 頭文件目錄 | |
| 類路徑 | -cp / -classpath | 用戶類搜尋路徑,覆蓋 CLASSPATH 環境變量 |
| -sourcepath | 源文件搜尋路徑(默認同類路徑) | |
| -bootclasspath | 覆蓋 bootstrap 類(交叉編譯用) | |
| 調試資訊 | -g | 生成所有調試信息(行號、變量、源文件) |
| -g:none / -g:{lines,vars,source} | 精細控制 | |
| 其他 | -verbose | 輸出編譯細節(載入類、編譯文件) |
| -Xlint[:key] | 啟用推薦警告(unchecked, deprecation, rawtypes...) | |
| -Xdiags:verbose | 詳細診斷輸出 | |
| -parameters | 保存方法參數名(反射獲取) | |
| -proc:{none,only} | 控制注解處理 |
-bootclasspath 可改)。-extdirs 指定)。-cp / CLASSPATH)。搜尋順序:Bootstrap → Extension → User。
找到 .class 與 .java 同時存在時,比較修改時間(或 -Xdepend 依賴分析)決定是否重編譯。
隱式編譯:引用的未列在命令行的類會被自動編譯,-verbose 可觀察。
# sources.txt
com/example/Main.java
com/example/util/Helper.java
com/example/model/User.java
javac @sources.txt
適合大型項目、構建腳本動態生成列表。
在 JDK 17 上編譯兼容 JDK 8 的類:
javac --release 8 -d out -encoding UTF-8 @sources.txt
--release 8 等價於 -source 8 -target 8 -bootclasspath ,自動配置正確的 bootstrap 類庫,避免誤用新 API。
error: package not found:檢查 -cp 是否包含依賴 JAR 目錄。error: unmappable character for encoding UTF-8:源文件實際非 UTF-8,補 -encoding GBK 或轉碼文件。class file has wrong version:-target 版本過高,運行環境 JVM 版本過低。-proc:only 或 META-INF/services 配置正確。實際項目請使用 Maven Compiler Plugin 或 Gradle Java Plugin 統一管理上述參數,避免手動敲命令:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>17</release>
<encoding>UTF-8</encoding>
<parameters>true</parameters>
<compilerArgs><arg>-Xlint:all</arg></compilerArgs>
</configuration>
</plugin>