> javac Hello.java # 生成 Hello.class
> java Hello # 輸出 Hello world
項目結構:
ahellodemo/
src/
com/whty/hello/Hello.java
classes/ # 輸出目錄 (需手動創建)
> cd ahellodemo
> javac -d ./classes ./src/com/whty/hello/Hello.java
# 生成 classes/com/whty/hello/Hello.class
-d:指定 class 文件輸出根目錄,自動創建包目錄結構./src/com/whty/hello/*.java> cd classes
> java com.whty.hello.Hello
# 輸出 Hello world
Manifest-Version: 1.0
Main-Class: com.whty.hello.Hello
Class-Path: .
Main-Class:入口類全限定名Class-Path:依賴 jar 相對路徑,多個用空格分隔> cd classes
> jar -cvfm hello.jar MANIFEST.MF com
# c:創建 v:顯示過程 f:指定文件 m:引入清單
> java -jar hello.jar
# 輸出 Hello world
myapp/
lib/ # 第三方 jar
util.jar
src/
com/app/Main.java
com/app/service/Service.java
classes/ # 編譯輸出
dist/ # 產出目錄
> javac -d ./classes -cp "./lib/*" ./src/com/app/*.java ./src/com/app/service/*.java
MANIFEST.MF:
Manifest-Version: 1.0
Main-Class: com.app.Main
Class-Path: lib/util.jar
> cd classes
> jar -cvfm ../dist/app.jar ../MANIFEST.MF com
> cp -r ../lib ../dist/ # 複製依賴到發布目錄
> cd dist
> java -jar app.jar
| 命令 | 參數 | 說明 |
|---|---|---|
| javac | -d | class 輸出目錄 |
| javac | -cp / -classpath | 類路徑 (jar/目錄,分隔符 ; Windows, : Linux/Mac) |
| javac | -sourcepath | 源文件搜索路徑 |
| javac | -encoding | 源文件編碼 (建議 UTF-8) |
| java | -cp | 運行時類路徑 |
| java | -jar | 運行可執行 jar (忽略 -cp,以 Manifest.Class-Path 為準) |
| java | -Dname=value | 系統屬性 |
| jar | c/v/f/m/t/u/x | 創建/顯示/文件/清單/列表/更新/解壓 |
| jar | -C dir | 切換目錄後操作 (打包多目錄) |
javac -encoding UTF-8,避免中文亂碼;,Linux/Mac 冒號 :-jar 模式下 -cp 無效:依賴必須寫在 Class-Path,且為相對路徑module-info.java 需用 --module-path、--module,建議改用 Maven/Gradle命令行構建是理解 Java 構建本質的基石。核心口訣:
javac -d output -cp deps src → 編譯java -cp output MainClass → 運行類jar -cvfm app.jar MANIFEST.MF -C output . → 打包java -jar app.jar → 運行包實際項目強烈建議使用 Maven/Gradle:依賴傳遞、多模塊、生命周期、插件生態完善,命令行僅作為調試、排查、極簡環境下的備選手段。