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

打造可雙擊執行的 JAR 包:Manifest 配置與 jar 命令全攻略

     編輯:Java 相關知識

核心原理:Main-Class 屬性

JAR 包本質是 ZIP 格式壓縮包,若在 META-INF/MANIFEST.MF 中指定 Main-Class,JVM 即可透過 java -jar 或雙擊直接啟動該類別的 main() 方法。

步驟 1:編寫 Manifest 文件

建立純文本文件(如 manifest.mf),內容:

Manifest-Version: 1.0
Main-Class: com.example.MainApp
Class-Path: lib/dependency1.jar lib/dependency2.jar

關鍵細節:

  • Main-Class 後必須有一個空格,再接全限定類名(不含 .class)。
  • 文件必須以換行符結尾(最後一行空行),否則最後一屬性會被忽略。
  • 行長度不超過 72 字節,超長需換行並以空格開頭續行。

步驟 2:打包命令詳解

jar cvfm MyApp.jar manifest.mf -C build/classes .

參數解析:

  • c:創建新檔案
  • v:顯示詳細輸出
  • f:指定輸出檔名
  • m:引入自定義 Manifest 文件
  • -C dir:切換目錄並包含其內容(保留包結構)

常見打包場景

場景命令範例
打包所有 .classjar cvfm app.jar manifest.mf *.class
含源碼與資源jar cvfm app.jar manifest.mf *.class *.java config/
指定輸出目錄jar cvfm dist/app.jar manifest.mf -C out/production .
更新現有 JARjar uvfm app.jar new-manifest.mf new-classes/

驗證與執行

# 檢查 Manifest 內容
jar tf MyApp.jar META-INF/MANIFEST.MF
# 或解壓查看
unzip -p MyApp.jar META-INF/MANIFEST.MF

# 執行
java -jar MyApp.jar

# Windows 雙擊執行需關聯 javaw.exe(無控制台)或 java.exe(有控制台)

避坑指南

  1. 類名錯誤:Main-Class 必須是完整包名+類名,區分大小寫,無 .class 後綴。
  2. 缺少換行:Manifest 最後一行必須空行,建議編輯器開啟「顯示行尾符」檢查。
  3. 依賴未打包:Class-Path 僅聲明相對路徑依賴,需手動將依賴 JAR 放在同級 lib/ 目錄。推薦使用 Maven Shade Plugin 或 Spring Boot Loader 打包 Fat JAR,一站式解決依賴。
  4. 編碼問題:Manifest 必須用 UTF-8 無 BOM 編碼保存。
  5. WinRAR 搶占關聯:安裝 WinRAR 後 .jar 可能被關聯為解壓軟體。解決:右鍵→打開方式→選擇 javaw.exe 並勾選「始終使用」,或編寫 run.bat:javaw -jar MyApp.jar。

進階:Maven 自動化打包

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.example.MainApp</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>

執行 mvn package 自動生成可執行 JAR,配合 maven-dependency-plugin 複製依賴至 target/lib/ 即可發布。

總結

掌握 Main-Class、Class-Path、換行符三大關鍵點,配合 jar cvfm 命令或 Maven 插件,即可輕鬆產出雙擊即跑的 Java 應用程式。現代專案建議直接採用 Spring Boot / Maven Shade 產出 Fat JAR,徹底擺脫依賴地獄。

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