上回说到,因为要提交一个加密算法的作业,我用 Java 写了加密程序以及用 Python 写了文本比较程序做校验。因为老师需要提交一个工程项目,所以为了测试方便我们需要将这些程序打包成可执行文件。对比了那么多的 Java 打包软件,我最终使用了 exe4j 软件进行 Java 程序的打包。
JRE
因为 Java 程序的运行需要 JVM,所以我们需要一个 jre 的包去给 exe 文件提供环境。一般在 JDK 的文件夹里会带有一个 jre,如果没有的话可以网上找资源下载或者直接通过 JDK 生成,方式如下:
- 以管理员身份运行 CMD,并且 cd 到电脑的 JDK 的目录里面(没有管理员身份可能会失败);
- 执行
bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
生成 jre,已生成相关目录会报错; - 生成完毕,可以复制到项目文件夹
生成 jar 程序
jar 程序就不多介绍了,因为我目前使用的 JetBrains 全家桶,所以直接用 IDEA 生成 jar 程序,复制出来供后续打包使用。
exe4j
exe4j 可以从官方渠道下载,软件本身是免费的,如果不使用 Lisence 就会在运行的时候弹出一个警告窗口。此时我们可以在网上去找 Lisence 码来用,软件本身没有其他的检查机制,都是可以使用的。在主界面的下方填入序列号(其他的随便填)即可生成纯净的程序。
这一部分的步骤基本上可以参考其他的教程,但是这里面会出现一些问题,列在下方:
路径问题
这是一个老生常谈的问题了,路径中不能够出现中文,否则会出现 jre 无法使用的问题。
都 2020 年了,现代编译器都已经支持中文了,这属实有点说不过去。
jre 路径问题
在生成程序的 JRE → Search sequence 设置项中,是 jre 的索引顺序,它会按照这个顺序去搜索引用 jre 程序作为 Java 程序的运行环境,在这里我们直接把这个设置为项目文件夹里的 jre 目录,这样只要文件夹完整,在别人的电脑里面也能直接使用。
注意这里的 JRE 文件夹最好设置为相对地址,同时这个相对地址是基于生成出来的可执行文件的,所以要注意不能搞错,否则就无法运行。 这里可以把 jar 文件的目录和生成程序的目录设为一致,就可以避免这个问题。
这样基本上就没有问题了,因为脱离了电脑本地的 JVM 依赖,所以也不会出现严重的兼容问题。