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

Java 打包部署實戰:Jar 轉 Exe 並製作安裝包 (exe4j + Inno Setup 避坑指南)

     編輯:Java 程式設計入門

工具鏈選型

  • exe4j:將可執行 Jar 包裝為原生 .exe,支持 32/64 位、JRE 綁定、圖標、啟動參數、服務安裝。
  • Inno Setup:免費開源安裝包製作工具,壓縮率高、腳本靈活、支持中文、可自定義向導頁面。

exe4j 關鍵配置步驟 (以 32 位為例)

1. 確定目標架構

exe4j 向導第 1 步:選擇 32-bit 或 64-bit。**生成的 .exe 位數必須與綁定的 JRE 位數完全一致**,否則啟動報錯 "This application requires a 64-bit JVM" 或無法找到 JRE。

2. JRE 綁定配置 (核心避坑點)

目標:用戶電腦無需安裝 JDK/JRE 即可運行。

  1. 項目目錄結構:
    MyApp/
    ├── myapp.jar
    └── jre/          (複製完整的 JRE 目錄,如 jre1.8.0_202)
    
  2. exe4j → "JRE" 步驟 → "Search Sequence" → **刪除所有默認搜索路徑** (注冊表、環境變量等)。
  3. 添加 "Directory" → 選擇相對路徑 jre (相對於生成的 .exe 位置)。
  4. 勾選 "Use this JRE only" (可選,強制使用綁定 JRE)。

生成的 .exe 與 jre 目錄同級放置,打包發布時整個 MyApp 目錄一起拷貝。

3. Swing/JavaFX 圖片資源加載失效解決

現象:IDE 運行正常,exe4j 打包後圖標/圖片不顯示。

原因:Jar 包內資源無法用 File 或絕對 URL 訪問,必須用類加載器。

修正代碼:


// 錯誤
ImageIcon icon = new ImageIcon("frame.png"); 
ImageIcon icon = new ImageIcon(new URL("file:frame.png"));

// 正確:類加載器獲取資源流
ImageIcon icon = new ImageIcon(
    ImageIO.read(getClass().getClassLoader().getResourceAsStream("frame.png"))
);
// 或
ImageIcon icon = new ImageIcon(
    getClass().getClassLoader().getResource("frame.png")
);

關鍵:圖片所在包/目錄必須在 exe4j "Resources" 步驟中勾選為 "Resource" (而非 "Class"),確保打包進 exe 內部資源區。

4. 其他常用設置

  • Executable Info:設置版本號、公司名、著作權、圖標 (.ico)。
  • Main Class:指定含 main 方法的類。
  • VM Parameters:如 -Xms256m -Xmx512m -Dfile.encoding=UTF-8。
  • Splash Screen:自定義啟動畫面圖片。

Inno Setup 製作安裝包 (壓縮體積 70%+)

exe4j 生成的目錄包含 jre (約 100MB+),直接發送太大。Inno Setup 可壓縮至 30-40MB。

關鍵腳本配置


[Setup]
AppName=MyApp
AppVersion=1.0
DefaultDirName={pf}\MyApp
DefaultGroupName=MyApp
Compression=lzma/ultra64
SolidCompression=yes
OutputDir=dist
OutputBaseFilename=MyApp-Setup

[Files]
; 關鍵:Source 指向 MyApp 目錄 (包含 myapp.exe 和 jre 子目錄)
; DestDir 指向安裝目錄
Source: "MyApp\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\MyApp"; Filename: "{app}\myapp.exe"
Name: "{commondesktop}\MyApp"; Filename: "{app}\myapp.exe"

避坑點:目錄層級

[Files] 區塊 Source **必須指向包含 jre 目錄的父目錄** (上例中為 MyApp),而不是直接指向 myapp.exe 或 jre。否則安裝後目錄結構錯亂,exe 找不到相對路徑的 jre。

完整發布流程清單

  1. Maven/Gradle 打包生成 myapp.jar (含依賴或配合 maven-shade-plugin / spring-boot-maven-plugin)。
  2. 複製目標平台同位數 JRE 目錄到項目根目錄 jre/。
  3. exe4j 配置 → 生成 myapp.exe 到項目根目錄。
  4. 測試 myapp.exe 獨立運行 (無 JRE 環境機器)。
  5. Inno Setup 腳本指向項目根目錄 → 編譯生成 MyApp-Setup.exe。
  6. 測試安裝包:安裝 → 桌面圖標啟動 → 協議關聯 → 卸載乾淨。

替代方案速覽

對於維護 Java 8/11 老項目、需快速交付 Windows 桌面端,exe4j + Inno Setup 仍是性價比最高、穩定性最好的組合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
工具優點缺點
Launch4j免費開源、Ant/Maven 插件完善GUI 配置弱、JRE 綁定較繁瑣
jpackage (JDK 14+)原生支持、生成 MSI/DMG/DEB、模組化裁剪 JRE (jlink)需 JDK 14+、學習曲線、舊版本遷移成本高
GraalVM Native Image原生機器碼、啟動極快、無 JRE、體積小反射/動態代理/ JNI 需配置、構建慢、生態適配中