javac 是 JDK 核心工具,負責將 Java 原始碼(.java)編譯為 JVM 位元碼(.class)。與 java 執行器不同,javac 要求輸入檔案具備 .java 副檔名。
javac [選項] 原始檔.java [其他原始檔...]
| 選項 | 功能說明 |
|---|---|
-classpath <路徑> / -cp | 設定類別搜尋路徑(多路徑用分號/冒號分隔) |
-d <目錄> | 指定編譯輸出根目錄,依套件結構建立子目錄 |
-g | 產生所有除錯資訊(行號、區域變數、來源檔) |
-g:none | 不產生任何除錯資訊 |
-g:{lines,vars,source} | 選擇性產生除錯資訊 |
-nowarn | 抑制所有警告訊息 |
-O | 啟用優化(內聯 static/final/private 方法),JDK 9+ 已移除 |
-verbose | 顯示編譯載入的類別與來源檔資訊 |
-source <版本> | 指定原始碼相容版本(如 8, 11, 17) |
-target <版本> | 指定位元碼目標版本 |
-encoding <編碼> | 指定原始檔字元編碼(建議 UTF-8) |
-parameters | 保留方法參數名稱至位元碼(JDK 8+,反射/除錯需求) |
-proc:{none,only} | 控制註解處理器執行 |
-Xlint[:key] | 啟用特定警告檢查(如 unchecked, deprecation, rawtypes) |
javac -d out -cp lib/* -encoding UTF-8 -source 11 -target 11 -parameters src/com/example/*.java
javac -g -d build/classes -cp lib/* src/**/*.java
javac -g:none -d dist/classes -cp lib/* src/**/*.java
--module-source-path、--module 編譯模組化專案。-encoding UTF-8,避免中文亂碼。-Werror(需配合 -Xlint)提升程式碼品質。-proc:only 或預設模式。-cp、套件宣告、import 陳述式。-source/-target 與執行環境 JDK 版本一致。實務專案強烈建議使用 Maven/Gradle 等建構工具管理編譯流程,手動 javac 僅適用於教學、腳本或極簡專案。