Java - 使用 Launch4J 部署与 JRE 捆绑的 exe

问题描述 投票:0回答:1

今天下午我终于用Java完成了我的项目。所以我决定使用 launch4j 构建 exe 文件使其可用于 Windows。

看似简单的事情,但实际上对我来说不是。我现在的情况是这样的:

  1. 我只安装了 Java SE Development Kit (JDK) 19
  2. 我的 jar 文件不能通过双击运行(我读过它可能是因为双击你用 javaw 而不是 java 打开它)但是使用
    java -jar "jar file path"
  3. 与 CMD 一起工作正常
  4. 如果我双击我的 exe,它只会在一瞬间显示 CMD 窗口,然后在不写任何内容的情况下消失。如果我尝试通过 CMD 运行它,它会告诉我这个 exe 需要 JRE 才能运行(如果我安装了 JDK 怎么可能?)
  5. I can't find my JRE inside the JDK: 我很确定 JDK 应该包含 JRE,但我在 JDK 19 的安装文件夹中找不到它

在最详细地描述了你我的状态之后,我现在想明确声明我的目标:

  1. 我想将我的 exe 与所需 JRE 的副本捆绑在一起,以便在没有显式安装 JRE 的情况下使其在其他 PC 上运行
  2. 我知道这是可能的,因为使用 Launch4J 您可以指定 JRE 的路径来运行您的程序。将 JRE 和 exe 放在一个文件夹中并在 launch4J 的配置文件中指定相对路径就足够了(类似于“./jrefolder”,因为它们在同一个文件夹中)
  3. 新正确的 exe 在其他机器上会发生什么?它会像我 PC 中的 jar 文件一样使用 javaw 打开吗?

希望有人能给我支持,因为这件事让我发疯,因为我已经完成了我的项目,但我仍然不能正式部署它

java exe launch4j java-19
1个回答
1
投票

JDK 19

我是从

OpenJDK19U-jdk_x64_windows_hotspot_19.0.2_7.msi
安装的。

找到你的应用程序依赖 JDK 模块

jdeps -cp "lib\*" --module-path "lib\*"  --multi-release 19 --print-module-deps --ignore-missing-deps you-app.jar
  • -cp "lib\*" (你的项目依赖jar文件)
  • --模块路径“lib\*”
  • --多版本 19
  • --打印模块部门
  • --忽略缺失部分
  • you-app.jar (你的应用程序 jar 文件)

或没有依赖jar文件:

jdeps --multi-release 19 --print-module-deps --ignore-missing-deps  you-app.jar

示例结果:

java.base,java.desktop

构建更小的 JRE

jlink --add-modules java.base,java.desktop --output jdk-19-mini-jre --strip-debug --no-man-pages --no-header-files --compress=2
  • --add-modules java.base,java.desktop (jdeps输出结果)
  • --输出jre(你的jre目录名)
  • --剥离调试
  • --没有手册页
  • --无头文件
  • --压缩=2

launch4j-3.14-win32

DemoApp
├── DemoApp.jar (your app jar)
├── demoapp.xml (Launch4j Config files)
└── jre (jlink command create JDK 19 jre)

打开 Launch4j

基本选项卡

  • 输出文件:
    C:\Users\IEUser\Downloads\DemoSwingApp\Output\DemoApp\demoapp.exe
  • 罐子:
    C:\Users\IEUser\Downloads\DemoSwingApp\DemoApp\DemoApp.jar

标题选项卡

  • 标题类型:
    GUI

JRE 选项卡

  • 捆绑的 JRE 路径:
    jre
  • 仅使用私有 JDK 运行时
  • 首先是 64 位,然后是 32 位

demoapp.xml

<?xml version="1.0" encoding="UTF-8"?>
<launch4jConfig>
  <dontWrapJar>false</dontWrapJar>
  <headerType>gui</headerType>
  <jar>C:\Users\IEUser\Downloads\DemoSwingApp\DemoApp\DemoApp.jar</jar>
  <outfile>C:\Users\IEUser\Downloads\DemoSwingApp\Output\DemoApp\demoapp.exe</outfile>
  <errTitle></errTitle>
  <cmdLine></cmdLine>
  <chdir>.</chdir>
  <priority>normal</priority>
  <downloadUrl>http://java.com/download</downloadUrl>
  <supportUrl></supportUrl>
  <stayAlive>false</stayAlive>
  <restartOnCrash>false</restartOnCrash>
  <manifest></manifest>
  <icon></icon>
  <jre>
    <path>jre</path>
    <bundledJre64Bit>true</bundledJre64Bit>
    <bundledJreAsFallback>true</bundledJreAsFallback>
    <minVersion></minVersion>
    <maxVersion></maxVersion>
    <jdkPreference>jdkOnly</jdkPreference>
    <runtimeBits>64/32</runtimeBits>
  </jre>
</launch4jConfig>

点击 Launch4j 构建 exe

复制

jre
Output\DemoApp\jre

输出目录

DemoSwingApp/Output
└── DemoApp
    ├── demoapp.exe
    └── jre

现在,您可以点击demoapp.exe

您需要将 DemoApp(包括 demoapp.exe + jre 目录)打包成一个 zip。

注意:我的例子没有使用第三方jar。只有App本身被打包成一个jar,并且只有Swing使用了JDK。

© www.soinside.com 2019 - 2024. All rights reserved.