將 Java 程式打包成可雙擊運行的 JAR 檔,是桌面應用分發的基礎技能。本文詳細說明帶套件編譯、建立 Manifest 清單、打包命令與常見坑點。
package ftools; // 必須與目錄結構對應
public class MenuBarDemo { ... }
# 在 src 目錄下執行 javac ftools/MenuBarDemo.java # 生成 ftools/MenuBarDemo.class
在與套件目錄同層(即 src 目錄)建立 config.txt(或 MANIFEST.MF):
Main-Class: ftools.MenuBarDemo
# 格式:jar -cvfm<套件目錄> jar -cvfm ftools.jar config.txt ftools
參數說明:
c 建立新檔v 顯示詳細過程f 指定輸出檔名m 引入自定 Manifest# 查看 JAR 內容 jar -tf ftools.jar # 雙擊運行或命令列 java -jar ftools.jar


| 現象 | 原因 | 解決 |
|---|---|---|
| 雙擊無反應 / 報錯「找不到主類」 | Manifest 缺少 Main-Class 或格式錯誤 | 檢查冒號後空格、末尾換行、類名含套件全路徑 |
| ClassNotFoundException | 依賴第三方 JAR 未包含 | 使用 maven-shade-plugin 或 one-jar 打包成 Fat JAR |
| 中文亂碼 | 編譯/運行編碼不一致 | javac -encoding UTF-8、JVM 參數 -Dfile.encoding=UTF-8 |
實務專案強烈建議使用 Maven/Gradle 管理建構生命週期:
<!-- Maven Shade Plugin 片段 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>ftools.MenuBarDemo</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
一鍵 mvn package 即可產出含依賴的可執行 JAR,避免手動操作失誤。