前言
我最近写了一个小工具,这次写的也比较实用,所以也就更加认真,写完了考虑发布一个发行版,所以就研究怎么把 Java 代码进行打包,就看到了 exe4j 这个工具,但是使用 exe4j 工具,将 jar 打包成 exe,如果有额外配置文件,这种就不是很舒服。
虽然步骤比较长,但是打包的效果还是很不错的,很适合小型工具这种文件的打包
首先确保jar能够正常运行,然后使用exe4j工具进行转换为exe,添加相对路径的jre让他能够跟着文件夹走,也就不用依赖系统jdk环境了
博主是使用 JavaFx 的程序为大家示例的
这里给博主的项目引流一下 https://github.com/ergou10086/ErgouTreeMarkdownClearup
将 java 程序打包成 jar 包
首先我们需要把 Java 程序打包成 jar 包,打包之前确保能够正常运行
选择项目结构,Flie —> Project Structure (或者Ctrl+Shift+Alt+S)

进入到工件页面开始打包
然后选择工件,进入到 Artifacts 设置,点击加号,选择为 JAR,选择 来自具有依赖项的模块
注意,这里有着你的 jar 包的存放位置,请注意,这个需要记住

选择打包
然后 选择要打包的项目,选择要执行的 main 函数和 META-INF 文件存放的路径

当你已经在这个路径下已经建过一个 module 了的话再次新建 module 就会报这个错,只要删除对应的 META-INF 文件夹即可
构建 jar 包
然后选择 Build 中的 Build Artifacts,然后在构建工件中选择构建,就会在前面设置的路径下生成我们的 jar 包,其实这个 jar 包就已经可以运行了,如果想更方便一点就继续看下去使用 exe4j 把它变成 exe 可执行文件。


将打包后的jar包打包成exe可执行文件
去下载 exe4j
官网下载 exe4j
Welcome 页
这个地方最好要注册一下,如果你不注册,打包好的软件每次启动都会报:this executable was created with an evaluation version of exe4j

“Open Configuration” 部分,点击 [Open] 可加载现有的配置文件,这里我之前用过所以已指定一个路径,点击 [Reopen] 可打开之前保存或加载过的配置。
果之前保存过配置文件,且路径正确(就是 “Open” 按钮后面显示的那个路径 ),直接点击 “Open” 按钮加载配置文件,然后根据后续提示操作。
初次使用或无配置文件,直接点击 “下一步” 按钮就行
ProjectType
这是选择打包模式的,咱们是 Jar 打包成 exe,所以说是第二个

Application info
这一页主要是两个内容,第一个 General 是填写 打包成 exe 文件的名称,下一个是填路径,是存放 exe 文件的路径
由于我这里没有截图,选择了其他博主的截图

Executable info
GUI application:图形用户界面应用程序,一般有可视化窗口、按钮、菜单等交互元素,适合大多数有图形界面的 Java 程序。所以这个我们要勾选上,如果你这个有 GUI 页面
Icon File勾选表明会为可执行文件设置图标,也就是你的 exe 的图标
Fail if an exception in the main thread is thrown,若主线程抛出异常,程序将终止运行和 Change working directory to,可指定程序运行时的工作目录,当前设置为 “.” ,即当前目录,这都是默认的

高级选项那边会有个架构(Architecture (32/64/ARM) ),这个需要选上,否则对于64位机,最后运行exe时会报错
Java invocation
选择Jar 并Archive后,空白区域会显示已导入的jar,在点击选择Main class,若jar导入成功,则会自动搜素main类,也可以自己选择Main类,然后点击next
查看 Jar 包位置

这里需要选择那个加号,导入 jar 包,选择 Archive

JRE
这里你用的什么 JDK,就选什么就行了,配置一下jdk版本最低版本,最高的可以不写
Configure splash screen
这是 exe4j 的 “配置启动画面(Configure splash screen )” 步骤 ,没有就算了
Messages
我也不太知道,反之 next 就行

Compile executable
这一步是自动的,意思是在构建 exe 了
Finished
到这一步就完成了,可以选择打开看看或者保存为配置文件

可以看到博主的 exe 已经正常运行了

其他方式构建 exe 的之后再发,貌似 javafx 里有自带的构建工具,更加方便实用,那个下次发