使用Launch4J将JRE打包成exe文件

6
我正在尝试使用launch4j将JRE打包到我的exe文件中。
我的文件夹结构如下-
|- test
    |- jre(copied from my windows installation of jre)
        |-bin
        |-lib
    |- jretest.jar (the jar file I am using to create my exe)
    |- jretest.exe (the output exe file)

在Launch4j中,我已将打包的JRE路径设置为jre
到目前为止,exe文件运行得很好。
然而,当我将exe文件复制到其他地方并运行它时,我会收到错误消息“此应用程序被配置为使用一个打包的Java Runtime Environment,但运行时缺失或损坏”。
我在SO上搜索并找到了以下问题,但无法从中获得关于我的应用程序可以运行的建议。 如何将JRE打包到Java应用程序的EXE中?Launch4j会显示“运行时缺失或损坏。” 如何使用Launch4j打包JRE? 这里有什么问题可能出错了?
我如何制作独立的exe?
我不想为我的应用程序制作安装程序,只是想运行它。
非常感谢您提供的任何帮助。

你尝试过在cmd上使用JRE运行Jar吗?在lauch4j上非常简单,只需键入JRE文件夹的名称并确保它与jar / exe位于同一文件夹中。也许你的JRE已经损坏了。 - Renatols
最初的问题已经解决(我猜测我的jre出了点问题。我将其删除并复制了一份,然后它就开始工作了)。当exe文件与原始jar文件放在同一个文件夹中时,它可以完美运行。但是当我将exe文件复制到其他地方时,它就无法工作(显示jre缺失或损坏的错误)。我该如何使exe文件完全独立? - Pranav
独立指什么?如果您想无论在哪里都能运行.exe文件,可以指定绝对路径,例如C:\Java\JRE。 - Renatols
但是这在另一台计算机上无法工作。我该如何将jre放入exe中,以便它能在任何没有安装jre的计算机上运行? - Pranav
1
我真的不认为你能做到,无论是使用Launch4j还是其他任何工具。此外,你的可执行文件大小至少会达到100MB,这一点一点也不好。你最好的选择是使用Launch4j捆绑JRE和像Inno Setup这样的软件来创建安装程序。 - Renatols
1个回答

7

使用launch4j无法将JRE嵌入exe文件中。launch4j的“bundle”选项只是指您将exe文件与JRE一起分发,因此并列在一起。您可以通过向配置XML文件添加以下选项来实现此操作。

<jre>
    <path>.....</path> 
</jre>

很重要的一点是,您需要相对于可执行文件指定JRE路径,否则如果您将exe移动到另一个位置(或另一台计算机),它将无法工作。您收到的错误消息是因为您没有将JRE与exe一起移动或复制,因此可执行文件无法再找到JRE。

或者,如果您不使用Bundle选项,则launch4j将尝试使用系统JRE,如果找不到,则将用户重定向到Oracle JRE下载页面。如果这不是您想要的,并且您真的想要单个可分发的exe,则您唯一的选择是使用类似NSIS或Inno Setup的安装程序。


4
launch4j的“bundle”选项意味着您将JRE与exe一起分发,放在同一目录下。基本上就像Maven的“provided”作用域... 鉴于许多人(包括我在内)尝试徒劳地将JRE捆绑到exe中,文档中应该明确说明这一点! - Olivier Gérardin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接