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);
        }
    }
}
参考资料