跳到主要内容

使用exe4j将Java程序打包为exe

本教程使用软件

  • IntelliJ IDEA 2022.2.3 (Ultimate Edition)
  • exe4j
  • WinRAR(可选)

思路: 代码→jar→exe→自解压程序。

构建jar包

这是一个把你的代码进行编译并塞进一个文件的操作。

打开你的项目。

打开文件-项目结构

选择项目设置-工件-加号-JAR-来自具有依赖项的模块

选择需要打包的模块和需要运行的主类

生成jar包:构建-构建工件-构建

可在输出目录找到jar包。

将jar包转换为exe

打开exe4j

提示

用户名和公司名可随便填。

注册码:A-XVK258563F-1p4lv7mg7sav

选择 "JAR in EXE" mode。

为你的应用起个名字,并选择输出目录。

如果是窗口程序,选择GUI application,如果是控制台程序,选择Console application

为exe文件设置名称,如果有需要,还可以选择图标,由于这个教程后面会使用自解压打包,所以此处可以不设置图标。

选择jar包。

这里一般会自动找到jar包的主类,如果没有找到,可以手动选择。

根据你的jdk版本填写最低支持的版本号。

进入高级选项,设置寻找 JRE 的方式,如果不需要嵌入JRE,保持默认即可。

如果需要嵌入JRE,添加一个按目录寻找的方式,使用相对路径。

将该方式移动到最顶层,或者删除其他方式。

选择Client Hotspot VM可以使得exe启动速度更快。

一路下一步,到这里exe文件就生成完成了,前往输出目录查看。

可以看到exe文件已经生成。

嵌入JRE

开发时使用的是JDK,JDK中包含了很多在运行时不需要的东西,运行Java程序只需要JRE就可以了,所以我们可以将JRE嵌入到exe中,这样就不需要用户安装JRE了。

下载 JRE

我使用的是 LibericaJRE,下载地址:https://bell-sw.com/pages/downloads/#downloads

根据你的JDK版本选择对应的JRE版本进行下载,我使用的是JDK17。

选择32位可以适配更多机器,并且JRE会更小。在我这个案例中,使用Standard JRE就够用了,如果你的程序需要使用JavaFX,那么你需要使用Full JRE

提示

按照官方的说法:

Liberica Java SE开发包(JDK)可用于运行、编译和调试应用程序,或用Java模块的子集创建自己的Java Runtime。如果你需要运行一个简单的Java应用程序,并且你正在寻找更小的足迹,请下载一个Java SE运行时环境(JRE)。

Full 版本包括LibericaFX,它基于OpenJFX和Minimal VM。

Standard 版本最适合于不需要任何额外组件的服务器和桌面部署。

下载完成后,解压到与exe文件同一目录下,并重命名为jre

打包 EXE

使用 WinRAR 生成自解压程序。

勾选创建自解压程序

进入自解压程序的进阶设置。

解压缩后执行填写上一步生成的exe文件。

模式中选择解压到临时目录全部隐藏,这样可以不用管理解压的过程。

更新中选择覆盖所有文件,防止解压时已经存在文件弹出提示。

文字及图标中选择exe文件的图标。

点击确定就可以开始打包了。

我这里新生成包含 JRE 的exe文件,足足多了 20MB 。

在没有安装 JRE 的机器上测试运行。

:::tip 其实可以去掉中间步骤

如果需要内嵌 JRE,直接用 WinRAR 运行jar文件,这样就不需要生成exe文件了。

:::