JAR 包本質是 ZIP 格式壓縮包,若在 META-INF/MANIFEST.MF 中指定 Main-Class,JVM 即可透過 java -jar 或雙擊直接啟動該類別的 main() 方法。
建立純文本文件(如 manifest.mf),內容:
Manifest-Version: 1.0
Main-Class: com.example.MainApp
Class-Path: lib/dependency1.jar lib/dependency2.jar
關鍵細節:
Main-Class 後必須有一個空格,再接全限定類名(不含 .class)。jar cvfm MyApp.jar manifest.mf -C build/classes .
參數解析:
c:創建新檔案v:顯示詳細輸出f:指定輸出檔名m:引入自定義 Manifest 文件-C dir:切換目錄並包含其內容(保留包結構)| 場景 | 命令範例 |
|---|---|
| 打包所有 .class | jar 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 . |
| 更新現有 JAR | jar 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(有控制台)
Main-Class 必須是完整包名+類名,區分大小寫,無 .class 後綴。Class-Path 僅聲明相對路徑依賴,需手動將依賴 JAR 放在同級 lib/ 目錄。推薦使用 Maven Shade Plugin 或 Spring Boot Loader 打包 Fat JAR,一站式解決依賴。javaw.exe 並勾選「始終使用」,或編寫 run.bat:javaw -jar MyApp.jar。<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,徹底擺脫依賴地獄。