SpringBoot打包成exe(別再用exe4j了,使用JDK自帶工具)

2023-03-31 21:00:53

SpringBoot打包成exe(別再用exe4j了,使用JDK自帶工具)

  • 搜到大部分打包exe的文章都是使用exe4j打包
    • 步驟賊多,安裝麻煩,打包麻煩
    • 收費軟體,公司使用會吃律師函
  • JDK14以上可以使用JDK自帶的jpackage打包
    • JDK自帶,一行命令搞定
    • 生成的程式包括java環境,使用者不需要安裝java

實測環境

  • JDK:17.0.6

步驟

  • 建立一個Springboot專案,開發程式碼
  • 使用"mvn package"打包成jar
    • 在專案下生產target目錄,且包含打包成的jar(例如:spring-1.0.jar)
    • 要確認這個jar能使用"java -jar ***.jar"執行
  • 開啟命令列(CMD/Powershell)進入專案根目錄成exe
  • 使用jpackage打包,如下
jpackage --type app-image --name spring --input target --main-jar spring-1.0.jar --win-console --dest dist
引數 作用 範例 說明
--type 打包型別 app-image 可選:"app-image", "exe", "msi",這裡使用app-image,選擇另外兩個選項需要安裝WiX
--name 應用名稱 spring 打包後的名稱,如"sping.exe"
--input 輸入目錄 target 該目錄所有檔案打包到應用目錄中
--main-jar 應用主jar spring-1.0.jar --input目錄裡的jar程式
--win-console 執行時啟動控制檯 --win-console 開啟應用程式時,開啟控制檯。如果不啟用在後臺執行,關閉只能從工作管理員中結束任務
--dest 輸出目錄 dist 輸出到該目錄,不要和--input同個目錄,否則會無限迴圈複製目錄

輸出目錄

  • dist
    • spring
      • app // 專案程式碼,和target目錄基本一致
        • ...檔案略
      • runtime // 執行環境,使用者可以不安裝java
        • ...檔案略
      • spring.exe // 點選該exe即可執行
      • spring.ico
  • target
    • ...目錄略
    • spring-1.0.jar
    • spring-1.0.jar.original

說明

  • 可以將spring目錄壓縮成zip發給使用者使用
    • 目錄裡包含了runtime,使用者電腦不需要安裝java
    • 打包前:153MB
    • 打包後(zip):71.8MB

總結

  • 在不得不開發使用者端時,很多人選擇JavaFX開發,但大家大部分使用spring全家桶開發
  • 用這種方式,可以繼續使用spring開發
    • 繼續前後端分離開發
    • 前端程式碼框架(如:Ant D)打包後是靜態檔案,可直接放入resources目錄
  • 使用jpackage打包成exe
  • 傳送給使用者直接開啟使用
    • 使用者在瀏覽器就可以存取
    • 可以優化成啟動程式時自動開啟url
@Slf4j
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        // 使用預設瀏覽器開啟
        try {
            Runtime.getRuntime().exec(String.format("cmd /c start %s", "http://localhost:8080/index.html"));
        } catch (Exception e) {
            log.warn("開啟使用者端主頁失敗", e);
        }
    }
}

參考資料