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

JAR 命令完整使用指南:打包、解壓、簽名、可執行 JAR

     編輯:Java 程式設計入門

一、JAR 基礎認知

JAR (Java ARchive) 本質是 ZIP 格式壓縮檔,內含編譯後的 .class、資源檔與 META-INF/MANIFEST.MF 清單檔。由 JDK/bin/jar.exe 建立,執行時依賴 lib/tools.jar。

二、命令語法與核心參數

jar {c|t|x|u} [v] [f] [m] [e] [0] [M] [i] [-C dir] files...
參數功能備註
c建立新 JAR四大核心操作互斥,必選其一
t列出目錄—
x解壓縮—
u更新現有 JAR—
f指定 JAR 檔名幾乎必加,否則輸出到 stdout
v詳細輸出顯示壓縮率、大小
m指定自訂 MANIFEST配合 manifest 檔
e指定主類別 (Main-Class)建立可執行 JAR,Java 6+
0不壓縮 (存儲模式)加快打包速度,檔案較大
M不產生 MANIFEST忽略 -m 設定
i產生索引檔 (INDEX.LIST)加速類別載入,大型 JAR 有用
-C dir切換工作目錄相當於 cd dir 後執行

三、常用操作範例

3.1 建立 JAR(含詳細輸出)

jar cvf myapp.jar -C build/classes .

將 build/classes 目錄下所有內容打包,-C 避免把目錄名也包進去。

3.2 查看 JAR 內容

jar tvf myapp.jar

3.3 解壓 JAR

jar xvf myapp.jar

3.4 更新/新增檔案

jar uvf myapp.jar com/example/NewClass.class

3.5 不壓縮建立(適合大型資源檔)

jar cvf0 resources.jar *.png *.wav

3.6 指定自訂 Manifest

jar cvfm myapp.jar manifest.txt -C build/classes .

3.7 建立可執行 JAR(Java 6+ e 參數最簡潔)

jar cfe myapp.jar com.example.Main -C build/classes .

等同於在 Manifest 寫入 Main-Class: com.example.Main。

3.8 為 JAR 產生索引

jar i myapp.jar

會在 META-INF/INDEX.LIST 寫入包/類別索引,類別載入器可先查索引再決定開啟哪個 JAR。

四、Manifest.mf 撰寫規範(極嚴格)

  1. 編碼:UTF-8,無 BOM。
  2. 每行長度 ≤ 72 字元,超長需換行並以空格開頭續行。
  3. 冒號後必須有一個空格:Main-Class: com.example.Main。
  4. 最後一行必須是空行(以換行符結尾)。
  5. 不允許空行夾在中間。

常用屬性:

Manifest-Version: 1.0
Main-Class: com.example.Main
Class-Path: lib/dependency1.jar lib/dependency2.jar
Created-By: 1.8.0_202 (Oracle Corporation)

五、可執行 JAR 完整流程

  1. 編寫 manifest.txt(含 Main-Class、Class-Path)。
  2. jar cvfm app.jar manifest.txt -C out/production/classes .
  3. 執行:java -jar app.jar 或雙擊(檔案關聯正確時)。

六、擴展類別載入路徑

  • JRE/lib/ext/:放入 JAR,由 ExtensionClassLoader 載入,優先於應用程式類別路徑。
  • Manifest Class-Path:相對路徑,支援多個 JAR,空格分隔。
  • 載入順序:Bootstrap → Extension → Manifest Class-Path → 應用 Classpath → 當前目錄。

七、網路 JAR 載入 (JAR URL)

URL url = new URL("jar:https://example.com/app.jar!/");
JarURLConnection juc = (JarURLConnection) url.openConnection();
Attributes attr = juc.getMainAttributes();
String mainClass = attr.getValue("Main-Class");
Class clazz = Class.forName(mainClass);
Method main = clazz.getMethod("main", String[].class);
main.invoke(null, (Object) new String[0]);

需 JAR 內 Manifest 正確設定 Main-Class。

八、實用小技巧

  • JAR 改 ZIP:jar cvfM data.jar folder (不產生 META-INF) → 改名 data.zip。
  • WinRAR/7-Zip 直接開啟/建立 JAR:只需手動建立 META-INF/MANIFEST.MF。
  • 輸出清單到檔案:jar tvf big.jar > list.txt 避免終端機閃過。
  • 避免打包多餘目錄層級:務必 cd 到類別根目錄再執行 jar,或用 -C 參數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved