jar {ctxui}[vf0Mme] [jar-file] [manifest-file] [entry-point] [-C dir] files...
| 選項 | 功能 |
|---|---|
| c | 創建新的 JAR 文件 |
| u | 更新現有 JAR 文件 |
| x | 解壓 JAR 文件 |
| t | 列出 JAR 文件目錄 |
| i | 為 JAR 文件生成索引信息 |
| 選項 | 說明 |
|---|---|
| v | 輸出詳細過程(verbose) |
| f | 指定 JAR 文件名(需緊跟文件名),缺省讀寫 stdout/stdin |
| 0 | 僅存儲,不壓縮(store only) |
| M | 不生成默認 Manifest 文件 |
| m | 引入自定義 Manifest 文件(需緊跟 manifest 文件名) |
| e | 指定應用程序入口類(需緊跟全限定類名),自動寫入 Manifest 的 Main-Class |
| -C dir | 切換到指定目錄執行後續文件操作(可多次使用) |
| -J | 傳遞 JVM 參數(如 -J-Xmx512m),無空格 |
jar-file、manifest-file、entry-point 的順序必須與 f、m、e 選項出現的順序一致。m 和 e,且 Manifest 中已有 Main-Class,打包會失敗。jar -cvfe app.jar com.example.Main -C build/classes .
等效於:創建 app.jar,入口類 com.example.Main,從 build/classes 目錄遞歸打包所有文件。
jar -cvfm app.jar manifest.txt -C build/classes .
manifest.txt 內容:
Main-Class: com.example.Main
Class-Path: lib/dependency.jar
jar -xvf app.jar # 解壓到當前目錄
jar -tvf app.jar # 僅列出目錄,不解壓
jar -uvf app.jar com/example/UpdatedClass.class
jar -i app.jar
會在 META-INF/INDEX.LIST 記錄包結構,類加載器可快速定位。
/(跨平台)。* 由 Shell 展開,非 jar 內部功能;建議用 -C dir . 遞歸打包整目錄。0 選項避免壓縮耗時,或使用 zip/gzip 獨立壓縮。實際專案極少手動敲 jar 命令,均通過構建工具插件配置:
maven-jar-plugin + maven-shade-plugin(Fat JAR)jar { manifest { attributes 'Main-Class': '...' } }