如何将JRE与Launch4j捆绑?

93

我在电脑上有Launch4J,它是一个很棒的程序。其中一个我感兴趣的功能是可以将JRE打包到通用的.EXE文件中。但是,我找不到任何说明文档来描述如何进行此操作。

我该如何将JRE与EXE一起打包?此外,我从哪里获取一个紧凑、便携的JRE来运行?Oracle上的下载链接都是安装程序包。


6
Launch4j可以让你将JRE与exe打包在一起,放在同一个文件夹下。但你不能使用它将JRE嵌入到exe中。 - THelper
那到底是什么意思... - DKIT
2
@DKIT 这意味着您可以将程序与包含JRE的文件夹一起发布,但是您不能使用launch4j生成自动包含JRE的独立 .exe 文件。因此,您可以将JRE与exe捆绑在一起(放在同一个文件夹中),但不能将其嵌入到exe本身中。最终您将向客户分发一个文件夹,或者依赖于他们系统中的JRE/JDK。 - Zac
7个回答

99

经过多次尝试,我最终找到了一种解决方法来将JRE打包到我的应用程序中:

我将我的应用程序打包为一个zip文件,并在其中包含以下文件夹:

containerFolder
|- jre
      |-bin (in bin there is java.exe)
      |-lib
|- cfg (to save the user configuration, but it's not needed)
|- bin (my application with the .exe and the .jar and all the other stuff)

在Launch4j的xml文件中,我这样配置JRE:

<jre>
    <path>../jre</path>
    <opt>-DgvSIG.confDir=../cfg</opt>
</jre>

这里的诀窍在于路径不是指向java.exe文件。指向jre的路径相对于.exe文件的位置,并且应该指向java.exe文件之前的一个文件夹。

我正在使用的jre文件夹只是从Windows系统中安装的jre文件夹复制&粘贴过来的。


4
非常帮助!文档对此不是很清楚…运行得非常好 :-) - Konrad 'ktoso' Malawski
嗨,这个路径是什么意思 <path>../jre</path>?它可能是已存在于 C://..java 文件夹中的路径,也可能是一个新下载的 Java JRE 安装程序。 - RajaReddy PolamReddy
@RajaReddyPolamReddy是从您的.exe文件到包含您的应用程序中jre所在文件夹的相对路径。 - Francisco Puga
14
这个问题询问如何在使用launch4j时将JRE“捆绑”在EXE文件中。这个回答展示了如何告诉launch4j使用你已经与你的EXE捆绑在一起的特定JRE,但不在它内部。这似乎是使用launch4j能做到的最好的。 (下面的另一个回答展示了创建安装程序的一种方法,然后安装您的EXE和JRE,但JRE不会在EXE中。) - Enwired
2
那么,没有附带JRE的JDK11怎么办? - Panagiss
显示剩余3条评论

22

我按照以下步骤操作,使用Launch4j 3.11版本成功:

  1. 创建一个新文件夹用于存放我的应用程序(例如命名为MyApp)。
  2. 从Java项目的dist文件夹复制jar文件和lib文件夹到MyApp文件夹中。
  3. 在应用程序文件夹MyApp中创建一个名为jre的文件夹,现在MyApp文件夹包含:
    • MyApp.jar
    • lib <- 包含我的Java应用程序所需的库。
    • jre
  4. 将Java JRE文件夹(C:\Program Files (x86)\Java\jre7)中的bin和lib文件夹复制到MyApp\jre中。
  5. 在Launch4j中设置所有必要选项后,将“Bundled JRE path”设置为“jre”

    Launch4j JRE options

  6. 确保在搜索选项中选择“仅使用私有JDK运行时”。

这个exe文件是否包含了jre,还是你需要将所有文件压缩成zip格式,并将.exe文件和jre文件夹一起提供给其他人运行,就像被接受的答案中所述? - Fodder
不,这不会将jre与exe捆绑在一起,唯一可以与exe捆绑的是您的应用程序jar文件。 - Ahmed Awad

8
同样的问题,朋友。现在不用担心了。它已经被解决了,为了解决未来的问题,我们采取了最大深度的解决方案。 解决方案是如何将您的JRE捆绑到您的jar中,而无需用户安装Java。您的Java应用程序将会运行。
1.从您的JRE文件夹中复制libbin文件夹到您的项目dist文件夹中。

jar to exe conversion

  1. 打开launch4j并输入以下设置。 在此输入图片描述

诀窍是您需要提供包含javaw.exe的完整路径。

享受!!!!


1
将任何文件放入dist文件夹,在清理和构建期间出现以下错误:无法删除文件... - ParisaN

0

我刚刚完成了这个。上面清楚地描述了捆绑jre的方法。

在这里,我分享一下我曾经苦苦挣扎的经验。如果你想在使用launch4j创建包装器exe之后创建安装程序exe,请注意launch4j和jre的文件路径。这是我用来解决问题的路径:

launch4j、bin/jre、resources/bin/jre。

launch4j、bin和resources处于同一级别。


0

上述提到的答案对我无效。我正在使用JDK 20。我所做的:

  1. 创建了我的Jar文件
  2. 为应用程序创建一个名为appFolder的文件夹
  3. 将jar文件放入appFolder
  4. appFolder中创建一个名为myJdk的文件夹
  5. 将我的计算机上JDK的内容放入appFolder中的myJdk文件夹中
  6. 将捆绑的JRE的路径(在我这里是JDK)设置为相对于appFoldermyJdk/bin

一个简单的文件夹视图:

appFolder
|- myJdk
   |- all contents from my jdk folder, installed on the machine. (The only folder I could remove was the jmods. All the rest were needed)
|- jar file

-2

JRE通常可以在SDK文件夹中找到。是的,在线链接是安装程序,但一旦安装完成,JRE现在位于您的本地磁盘上。我的JRE位于

${jdk folder}\jre

如果你真的想要,JRE 中不需要的部分可能可以手动删除(我不确定在线上有什么可用资源)。


我该如何将它打包到EXE文件中?我正在尝试将所有内容打包到JAR文件中,这样我就不必担心用户是否安装了Java。我意识到让他们下载Java可能是最好的选择;然而,我想尝试所有的部署选项。 - CodeBunny
3
@CodeBunny,仅依靠Launch4j无法实现此操作,但有人找到了另一个好的解决方案:http://mark.koli.ch/bundle-java-the-jre-and-launch-a-java-app-with-7zip-sfx - Zero3

-2

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