jar (Java Archive Tool) 是 JDK 自帶的打包工具,基於 ZIP 格式,用於將多個文件打包為 .jar 文件,支持清單文件、數字簽名、模塊化等特性。
jar {ctxui}[vfm0Mi] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
| 參數 | 含義 | 典型用法 |
|---|---|---|
c | 創建新歸檔 | jar cf app.jar com/ |
t | 列出歸檔目錄 | jar tf app.jar |
x | 解壓歸檔文件 | jar xf app.jar |
u | 更新現有歸檔 | jar uf app.jar com/NewClass.class |
i | 生成索引信息 | jar i app.jar |
| 選項 | 說明 |
|---|---|
v | 輸出詳細信息 |
f | 指定歸檔文件名(必須配合 c/t/x/u 使用) |
m | 包含清單文件信息 |
0 | 僅存儲,不壓縮 |
M | 不創建默認清單文件 |
C | 切換目錄(相對路徑處理) |
e | 指定應用程序入口點(Main-Class) |
# 打包整個包目錄
jar cvf myapp.jar com/
# 打包指定文件
jar cvf utils.jar com/util/*.class com/config.properties
# 方式一:使用 e 參數(JDK 6+)
jar cfe app.jar com.main.MainClass com/
# 方式二:自定義清單文件
echo "Main-Class: com.main.MainClass" > manifest.txt
jar cvfm app.jar manifest.txt com/
運行:java -jar app.jar
# 查看內容
jar tf app.jar
# 解壓到當前目錄
jar xf app.jar
# 解壓特定文件
jar xf app.jar com/main/MainClass.class
# 添加/替換文件
jar uf app.jar com/new/Feature.class
# 更新清單屬性
jar ufm app.jar new-manifest.txt
jar cvf app.jar -C module1/target/classes . -C module2/target/classes . -C resources .
-C dir 切換到指定目錄,後續文件相對該目錄解析。
Manifest-Version: 1.0
Created-By: 17.0.1 (Oracle Corporation)
Manifest-Version: 1.0
Main-Class: com.example.MainClass
Class-Path: lib/dependency1.jar lib/dependency2.jar
Build-Date: 2024-01-15
Build-Version: 1.0.0
Sealed: true
app.jar
├── META-INF/
│ ├── MANIFEST.MF # Main-Class: org.springframework.boot.loader.JarLauncher
│ └── ...
├── BOOT-INF/
│ ├── classes/ # 項目編譯類
│ └── lib/ # 依賴 JAR 包
└── org/
└── springframework/
└── boot/
└── loader/ # 加載器類
# 生成密鑰庫
keytool -genkeypair -alias mykey -keystore mykeystore.jks
# 簽名
jarsigner -keystore mykeystore.jks app.jar mykey
# 驗證
jarsigner -verify -verbose -certs app.jar
# 創建模塊化 JAR
jar --create --file=modapp.jar --main-class=com.app.Main -C mods/com.app .
# 查看模塊信息
jar --describe-module --file=modapp.jar
Class-Path 相對路徑:依賴 JAR 需與主 JAR 同級或在 lib/ 目錄| 問題 | 原因 | 解決 |
|---|---|---|
| no main manifest attribute | 清單缺少 Main-Class | 使用 cfe 或自定義清單 |
| ClassNotFoundException | Class-Path 路徑錯誤或依賴缺失 | 檢查依賴 JAR 位置、清單路徑 |
| Invalid signature file | 簽名驗證失敗/文件被篡改 | 重新簽名、檢查密鑰庫 |
| zip file closed | JAR 文件損壞或佔用 | 重新打包、檢查磁盤空間 |
jar 命令是 Java 生態基礎工具,掌握其核心參數組合(cvf/cfe/tf/xf/ufm)、清單文件配置、可執行 JAR 創建與簽名驗證,對理解 Java 部署機制、排查打包問題具有重要價值。實際項目中建議配合 Maven/Gradle 使用,專注於構建邏輯而非手動命令。