首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java jar 命令完整用法詳解:打包、運行、解壓與簽名

     編輯:Java 相關知識

jar 命令概述

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)

實戰示例

1. 基本打包

# 打包整個包目錄
jar cvf myapp.jar com/

# 打包指定文件
jar cvf utils.jar com/util/*.class com/config.properties

2. 創建可執行 JAR(指定主類)

# 方式一:使用 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

3. 解壓與查看

# 查看內容
jar tf app.jar

# 解壓到當前目錄
jar xf app.jar

# 解壓特定文件
jar xf app.jar com/main/MainClass.class

4. 更新 JAR 文件

# 添加/替換文件
jar uf app.jar com/new/Feature.class

# 更新清單屬性
jar ufm app.jar new-manifest.txt

5. 多模塊/多目錄打包

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

Spring Boot Fat JAR 結構

app.jar
├── META-INF/
│   ├── MANIFEST.MF          # Main-Class: org.springframework.boot.loader.JarLauncher
│   └── ...
├── BOOT-INF/
│   ├── classes/             # 項目編譯類
│   └── lib/                 # 依賴 JAR 包
└── org/
    └── springframework/
        └── boot/
            └── loader/      # 加載器類

JAR 簽名與驗證

# 生成密鑰庫
keytool -genkeypair -alias mykey -keystore mykeystore.jks

# 簽名
jarsigner -keystore mykeystore.jks app.jar mykey

# 驗證
jarsigner -verify -verbose -certs app.jar

模塊化 JAR (JDK 9+)

# 創建模塊化 JAR
jar --create --file=modapp.jar --main-class=com.app.Main -C mods/com.app .

# 查看模塊信息
jar --describe-module --file=modapp.jar

最佳實踐建議

  1. 構建工具優先:Maven/Gradle 自動化管理依賴、清單、打包流程,手動 jar 命令僅用於調試
  2. Class-Path 相對路徑:依賴 JAR 需與主 JAR 同級或在 lib/ 目錄
  3. 避免衝突:多模塊打包時注意資源文件覆蓋(如 META-INF/services/)
  4. 簽名發布:生產環境 JAR 建議數字簽名,保證完整性與來源可信
  5. 版本信息嵌入:清單中包含構建版本、Git Commit ID、構建時間,便於運行時查詢

常見問題排查

問題原因解決
no main manifest attribute清單缺少 Main-Class使用 cfe 或自定義清單
ClassNotFoundExceptionClass-Path 路徑錯誤或依賴缺失檢查依賴 JAR 位置、清單路徑
Invalid signature file簽名驗證失敗/文件被篡改重新簽名、檢查密鑰庫
zip file closedJAR 文件損壞或佔用重新打包、檢查磁盤空間

總結

jar 命令是 Java 生態基礎工具,掌握其核心參數組合(cvf/cfe/tf/xf/ufm)、清單文件配置、可執行 JAR 創建與簽名驗證,對理解 Java 部署機制、排查打包問題具有重要價值。實際項目中建議配合 Maven/Gradle 使用,專注於構建邏輯而非手動命令。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved