SpringBoot打包成exe(別再用exe4j了,使用JDK自帶工具)
- 搜到大部分打包exe的文章都是使用exe4j打包
- 步驟賊多,安裝麻煩,打包麻煩
- 收費軟體,公司使用會吃律師函
- JDK14以上可以使用JDK自帶的jpackage打包
- JDK自帶,一行命令搞定
- 生成的程式包括java環境,使用者不需要安裝java
實測環境
步驟
- 建立一個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);
}
}
}
參考資料