JAR (Java Archive) 是 Java 平台的標準封裝格式,本質上是一個 ZIP 壓縮文件。它的核心作用是將零散的 .class 文件、配置文件、圖片、JSP/HTML 等資源整合為單一文件,便於分發、部署和類加載。
JAR 技術自 JDK 1.1 起引入,1.2 版本增強。官方總結的優勢包括:安全性、快速下載、壓縮存儲、包密封、版本控制、跨平台可移植性。
.class 文件 + 輔助資源(圖片、配置、JSP、HTML 等)。.jar 文件,內含清單文件 META-INF/MANIFEST.MF。打開命令行(Windows 執行 cmd),輸入 jar --help 或 jar 查看用法:
用法: jar {ctxui}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
| 參數 | 含義 |
|---|---|
| -c | 創建新的存檔 |
| -t | 列出存檔目錄 |
| -x | 解壓存檔(指定或所有文件) |
| -u | 更新現有存檔 |
| 參數 | 含義 |
|---|---|
| -v | 生成詳細輸出到標準輸出 |
| -f | 必選,指定 JAR 文件名 |
| -m | 包含指定清單文件的清單信息 |
| -0 | 僅存儲,不壓縮(無 ZIP 壓縮) |
| -M | 不生成所有條目的清單文件 |
| -i | 為指定 JAR 生成索引信息 |
| -C | 切換到指定目錄並包含後續文件(支持目錄遞歸) |
# 1. 編寫清單文件 Manifest.txt
Main-Class: com.example.MainApp
# 2. 打包
jar -cvfm MyApp.jar Manifest.txt -C build/classes .
-c 創建,-v 顯示過程,-f 指定文件名,-m 引入清單。-C build/classes . 切換到編譯輸出目錄,打包所有內容。jar -tf MyApp.jar
jar -xf MyApp.jar # 解壓全部
jar -xf MyApp.jar com/example/Config.properties # 解壓指定文件
jar -uvf MyApp.jar com/example/new-config.properties
Manifest-Version: 1.0
Main-Class: com.example.MainApp # 入口類,雙擊/ java -jar 運行
Class-Path: lib/dependency1.jar lib/... # 依賴路徑(相對路徑,空格分隔)
Sealed: true # 密封包,防止擴展
-m 和 -f 指定的文件須與命令中出現順序一致。-C 避免將絕對路徑打入包內。實際項目中極少手動敲 jar 命令,主流構建工具已封裝:
maven-jar-plugin / maven-shade-plugin(打 Fat JAR)jar { manifest { attributes 'Main-Class': '...' } }spring-boot-maven-plugin 一鍵生成可執行 Fat JAR,內嵌容器。掌握 jar 命令底層原理,有助於理解構建產物結構、排查類加載衝突、定制打包邏輯。從「壓縮分發」到「模組化封裝」(JDK 9+ JMOD/Jlink),JAR 始終是 Java 生態的基石。