利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件

利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件

  • exe4j 的工作原理
  • EXE 制作教程

  将 JAR 包制成能在 Windows 上直接运行的 EXE 文件,是很多 Java 爱好者喜欢做的事情。虽然这不是对 JAR 包的商业用法,不过很多人都希望能学以致用,而不仅仅是为了自己的职业生涯。有鉴于此,本文给出了将 JAR 包制成 EXE 文件的方法。为了避免降低使用该 EXE 文件的门槛,EXE 文件在运行前最好还能免安装 JDK,本文也给出了相应的方法。不过即便如此,在具体使用之前,也有需要了解的事项。笔者在编写这个教程之前,几乎踩遍了所有常见的坑。如果读者不想重蹈覆辙,还是仔细阅读本文。

笔者的运行环境:

  • JDK 11.0.12

  • exe4j 6.0.1

  • Windows 10 教育版

exe4j 的工作原理

  exe4j 这个软件其实很傻瓜,很多人能可以自行制成 EXE,不过他们不清楚如何让这个 EXE 脱离本电脑的 JDK。实际上,exe4j 这个软件所做的工作只是封装 JAR 包并让此 JAR 包链接 JRE。也就是说,此软件并不能免除使用 JRE,并不能将 JDK 也一同封装到 EXE 中,但是它可以指定 EXE 读取 JRE 的方法。一般来说,如果没有在 exe4j 中进行这种指定,则生成的 EXE 将根据本 Windows 操作系统中关于 Java 的环境变量来寻找 JRE。如果进行了这种指定,则生成的 EXE 将根据指定的相对路径来寻找 JRE。也就是说,使用此软件能够完成的是,使一个 Java 程序,原来需要通过 JAR 包才能运行,现在变成只需要一个文件夹中 EXE 文件与 JRE 文件即可运行。此结果看起来不是完全令人满意,但也基本满足广大使用者的要求。

  如果读者想将 JDK 也一同封装到 EXE 中,可以使用在本教程使用的 exe4j 的基础上使用另一款软件:Inno SetupInno Setup 有两项功能:

  1. 当程序的所有文件封装成一个 EXE 文件。

  2. 生成的 EXE 文件同时是一种含软件安装引导界面的安装包。

但是,Inno Setup 只对本来就可以运行的 EXE 有效。因此需要先使用在本教程的方法生成 EXE,然后再使用 Inno Setup 制作软件安装包。

EXE 制作教程

  下面开始真正的教程。

  1. 需要一个可以在 CMD 中单独运行的 JAR 包。在 CMD 中运行 JAR 包的方法是,使用命令:java -jar xxx.jar

    • 为了减少不必要的踩坑,建议不要使用多 JAR 依赖。如果读者手上有关于 Java 程序的多个依赖 JAR 包,建议将其合成一个 JAR 包。合成的方法有很多,可以借助 Java 的操作系统命令,也可以使用构建工具,如 Maven。

      • 如果读者的 Java 程序是基于 Maven 的多模块应用,则将其打成一个 JAR 包的方法,可见笔者的另一篇博客:

        将 Maven 中的多模块项目只打成一个 JAR 包:
        https://blog.csdn.net/wangpaiblog/article/details/119628194?spm=1001.2014.3001.5501

  2. 在安装 exe4j 前,需要先安装 JDK。在笔者编写本教程的时候,exe4j 最高只支持 Java 11。因此如果读者安装的 Java 版本高于 exe4j 的要求,exe4j 的安装将不会成功。

  3. 前面已经讲到,EXE 的运行需要 JRE。如果希望生成的 EXE 能在其它计算机中运行,则需要另行准备 JRE。另外,Java 11 及以上的版本的安装目录中都没有直接的 JRE。对于这种问题,可以从下面的方法中选择其中一种:

    • 将 JDK 当成 JRE 来使用,此时,JDK 目录就是 JRE 的目录。之所以这样可行,是因为 JRE 已经被包含在 JDK 中了,不过缺点是 JDK 目录所占空间很大,笔者可以衡量其中的利弊。

    • 上面的方法会引入多余的依赖,造成软件所占空间过于庞大。可以自行记录自己的项目与依赖的 JDK,然后使用如下命令生成依赖:

      jlink --strip-debug --compress 1 --no-header-files --no-man-pages --output miniJre --add-modules java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.desktop
      
    • 生成 JRE 目录。JRE 目录所占大小一般是小于 JDK 目录的,不过这种方法有很多弊端,生成的 JRE 目录如果不是完整的,可能导致如下报错:

      java.lang.NoClassDefFoundError: java/util/logging/LogRecord at org.apache.commons.logging.LogAdapter$JavaUtilAdapter.createLog

      生成 JRE 目录的方法有很多,对于 Java 11,只需要在 Java 的安装目录的目录 bin(如:C:\Program Files\Java\jdk-11.0.12\bin)下输入命令:(如果 CMD 控制台没有管理员权限,需要先获取管理员权限)

      jlink.exe --module-path jmods --add-modules java.desktop --output jre

      此时会生成一个 JRE 目录。完整的 JRE 目录下应该含有目录 bin 等。需要将此 JRE 目录移动至其它地方保存,不要放在 Java 目录下污染环境。exe4j 在安装时会扫描 Java 的目录,此过程生成的 JRE 目录会对 exe4j 形成干扰,导致其安装失败。

  4. 下载 exe4j。网址:https://exe4j.apponic.com/

  5. 安装 exe4j 的过程很简单,这里从略。不过要注意,安装 exe4j 之前要下载合适的 JDK。如果安装的 JDK 版本过低或过高,则 exe4j 将无法启动。

  6. 准备好以下的文件:

    • 本项目的 JAR 包
    • JRE 文件夹。如果把 JDK 目录当成 JRE 目录,则需要拷贝整个 Java 安装目录(如:C:\Program Files\Java\jdk-11.0.12)。Java 的安装目录下一般有目录 bin 等。
    • EXE 图标文件(此文件在制作完 EXE 之后就可以删除,不过建设保留备用)

    【注意】

    • 如果不打算在本教程之后制作含安装引导界面的 EXE 安装包,则只需要将上述的这些文件放入同一个文件夹中。这样做的话,就可以清楚地区分软件的核心程序与通用的 JRE。
    • 如果打算在本教程之后制作 含安装引导界面的 EXE 安装包,则需要将 本项目的 JAR 包 放入 JRE 文件夹。实际上,建议将所有的除 JRE 的文件全放入 JRE 文件夹`中。

  7. 打开 exe4j,填写密钥。笔者已经事先有了密钥,并保存在了本地文件夹。输入密钥之后就可以使用该软件的后续功能了。


    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第1张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第2张图片

  8. 选择将 JAR 包制成 EXE 模式。


    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第3张图片

  9. 设置应用名与 EXE 的存放地址等信息。注意:请记住此 EXE 输出地址,此地址将成为基地址。后面的 JRE 目录等的地址,如果使用的是相对路径,将使用该地址作为基地址。


    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第4张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第5张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第6张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第7张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第8张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第9张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第10张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第11张图片

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第12张图片

  10. 此处很关键,关系到生成的 EXE 能不能脱离本操作系统。

    • 如果需要生成的 EXE 在其它计算机上可运行,则此处可以直接点击 Next。此时,生成的 EXE 会根据本操作系统的环境变量来寻找 JRE。如果以后更改了相应的环境变量,则此 EXE 文件那时可能会运行失败。

      利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第13张图片

    • 如果希望生成的 EXE 能在其它计算机中运行,则需要进行如下操作。

      利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第14张图片
      利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第15张图片


      【踩坑提醒】

      • 如果希望生成的 EXE 支持自由复制,则此处的路径要使用相对路径。这就是前面为什么要将相关文件放一起。

  11. 按下图所示操作即可。


    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第16张图片


    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件_第17张图片

  12. 如果点击上面的按钮,应用可以顺序运行,说明前面的操作都已完整按笔者所指示的进行。此时,前面设置的 EXE 输出目录应该有了相应的 EXE 文件。

    • 如果读者前面没有选择自定义 JRE 目录,则此 EXE 输出目录下的除 EXE 文件都可以删去。

    • 如果读者前面选择的是自定义 JRE 目录,则只需保留的是 EXE 文件以及文件夹 JRE,且文件夹 JRE 与 EXE 文件的相对位置不能移动(也就是说,需要且只需要将文件夹 JRE 与 EXE 文件放在同一个文件夹下即可)。除此之外,此 EXE 输出目录下的其它文件均可删去。

  13. 最后,建议运行此 EXE 来检验一下本次生成 EXE 是否成功。

  14. 之后,如果想制作 含安装引导界面的 EXE 安装包,可以使用另一款软件:Inno Setup

你可能感兴趣的:(教程/入门使用,Java,java,exe4j,jar,免安装,exe)