前言
这篇文章的内容基于 整合了H2 的JavaFX 项目,详情可以看我之前的博客:JavaFX桌面开发——整合H2数据库这篇文章主要讲述了 如何在SpringBoot 已经整合了JavaFx的情况下配置 - 掘金 (juejin.cn)
JavaFX 作为一个桌面开发的工具,本身就是要形成 桌面应用,但是使用Java编写的桌面应用总是离不开Java环境这就很头疼了,而有没有什么方法,可以将整个项目变成EXE,这样就可以在Windows上运行了呢? 还真有,所以这篇文章将教会你:如何让你的JavaFX项目变成可以直接运行的EXE文件前提条件
- 项目中具备 Maven,且可以正常使用。
- 具备转换工具(会讲)
转换工具
所谓的转换工具,就是让 JAR包变成EXE 的工具,较为常见的是 exe4j ,但是exe4j的缺陷非常明显:
安装麻烦,转换过程很长,内容不方便理解
特定情况下使用需要收费,且公司使用会吃律师函。
这里推荐 使用 JDK14 中新增的指令 jpackage:(14以上的版本中也会带有这个指令)
使用方便,只需要一行指令就能完成全部的转换工作
转换效率高,通常不超过一分钟即可转换完成
如果没有 JDK14及以上版本的开发者,推荐前往下面的网站中下载JDK17(一个性能表现非常优异的版本,具体细节略)
Java Download | Java 8, Java 11, Java 17, Java 21, Java 23 - OpenJDK Builds for Linux, Windows & macOS (bell-sw.com)小声嘀咕:能使用到 SpringBoot 的开发者应该不可能出现没有 JDK 的问题叭。
具体操作
使用IDEA 打开项目后,先运行一遍,确保整个项目在IDEA的运行环境下没有问题
使用Maven 进行打包
右击项目的 pom.xml 文件,找到maven选项,依次执行 clean , package
正确完成clean后,整个项目不应该会有命名为 target 或者 classes 等的输出文件。
正确完成package后,整个项目会重新出现输出目录,如下例:到这里,我们需要 Maven 完成的事情就告一段落了
使用 jpackage
在IDEA 中点击项目模块目录(对应上面我的例子中是 demo 目录),按下 Ctrl+Alt+F12 ,此时选择显示 项目模块目录
在弹出的文件资源管理器中进入刚才的模块目录,打开控制台。(可以通过清空上方的路径后输入cmd进行快捷弹出)
注意:这个目录不能随意选择,在打开cmd的目录中必须要有下面要讲的 --input 参数对应的目录,不然这个项目将不能完成转换
在弹出的控制台中根据自己情况输入 jpackage 的相关参数:
参数 | 作用 | 示例 | 说明 |
---|---|---|---|
--type | 打包类型 | app-image | 可选:"app-image","exe", "msi",这里使用 app-image,选择另外两个选项需要安装 WiX |
--name | 应用名称 | Aquacard | 打包后的名称,如“Aquacard.exe” |
--input | 输入目录 | target | jpackage读取的文件夹,需要为项目的输出目录 |
--main-jar | 应用的Jar包 | Aquacard.jar | --input 目录中的 jar包 |
--win-console | 运行时启动控制台 | --win-console | 点开EXE后,打开一个控制台(和IDEA中运行的形式差不多),如果不添加该参数,即为后台运行,关闭时需要从任务管理器进行关闭。 |
--dest | 输出目录 | dist | 输出到该目录,别和--input同一个目录,否则会循环复制。 |
可以参考我的指令:
jpackage --type app-image --name Aquacard --input target --main-jar Aquacard.jar --win-console --dest dist 输入后回车,等待执行完成即可。 执行完成后,点开 输出目录(dist),找到里面的 exe,打开就可以成功运行了。注意事项
- 在文件结构不做更改的情况下打开 exe ,才能正常运行,否则一切白搭。即把输出目录(dist)开始的文件夹全部打包转发给其他人才能正常使用,单独的 EXE 启动不起来。,可以通过创建快捷方式,让启动更快速
其他
修改Maven打包的Jar名
在使用 Maven 打包(package)的时候,生成的 jar 包总是类似于 项目名-0.0.1-SNAPSHOT.jar 格式的,这种文件名不光记起来麻烦,由于一些特殊字符的存在,有时候输入都是一个问题。
其实我们可以通过在pom.xml 中的 build 标签中添加 filename 标签来解决这个问题。如下图:上图表示 将Maven 打包后生成的Jar包命名为 AquaCard.jar
Maven 修改内容
给出我的 在进行生成EXE时 pom.xml 需要做出的改动:
<build>
<finalName>AquaCard</finalName> <!-- 打包后的文件名-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
总结
这篇文章详细介绍了如何 将JavaFX项目变成EXE,使其脱离Java环境的限制。