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同个目录,否则会有限循环复制目录 |
- 更多其余参数查看JPackage指令将可执行Jar包打包成EXE运行程序和MSI安装程序
输入目录
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@SpringBootApplicationpublic 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); } }}
参考资料
JPackage指令将可执行Jar包打包成EXE运行程序和MSI安装程序
- 该文章说必须装置WiX和.NetFramework。但我实测时app-image类型不须要(有可能是因为JDK版本)