JAR(Java Archive)本質是 ZIP 格式壓縮包,唯一區別在於包含 META-INF/MANIFEST.MF 清單文件。對比:
test.zip test.jar
└─ test/ ├─ META-INF/
└─ Test.class └─ MANIFEST.MF
└─ test/
└─ Test.class
創建 manifest.mf(任意位置),關鍵行:
Main-Class: com.example.MainClass
Class-Path: lib/dep1.jar lib/dep2.jar 聲明依賴(相對 JAR 路徑)。project-root/
├─ manifest.mf
└─ com/
└─ example/
└─ MainClass.class
jar cvfm MyApp.jar manifest.mf com
c 創建,v 顯示過程,f 指定輸出文件,m 引入自定義 Manifest。com 為打包的根目錄(包含包結構)。java -jar MyApp.jar
雙擊運行需系統關聯 .jar 到 javaw.exe(Windows JRE 安裝默認已配置)。
| 問題 | 原因 | 解決 |
|---|---|---|
| NoClassDefFoundError | Class-Path 路徑錯誤或依賴 JAR 缺失 | 檢查相對路徑,確保依賴 JAR 與主 JAR 同級目錄 |
| 無主清單屬性 | Manifest 缺少 Main-Class 或換行符缺失 | 重新編寫 manifest.mf,確保末尾換行 |
| 類找不到 | 打包時未包含完整包目錄結構 | 在包根目錄父級執行 jar 命令,參數為包根目錄名 |