搜到大部分打包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@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版本)