将JRE嵌入Windows可执行文件?

70
假设我想分发一个Java应用程序。
如果我想将其作为单个可执行文件分发,我可以很容易地构建一个.jar文件,其中包含应用程序及其所有外部依赖项(通过一些Ant技巧)。
现在假设我想将其作为Windows上的.exe文件分发。鉴于存在诸如Launch4j之类的好工具,这很容易。
但是,如果我也不想依赖终端用户安装正确的JRE(或者根本没有安装任何JRE),该怎么办?我想分发一个带有我的应用程序的JRE,而且我的应用程序应该在这个JRE上运行。创建Windows安装程序可执行文件并嵌入一个包含所有必要JRE文件的文件夹很容易。但是那样我就在分发一个安装程序而不是单个文件的应用程序。
是否有一种方法可以将应用程序和JRE都嵌入到.exe文件中,使其充当应用程序启动器(而不是安装程序)呢?

15
常规应用程序通过安装程序或独立可执行文件的方式将永远存在。有很多原因使得基于网络的部署并不是一种适用于所有情况的解决方案。 - SnakeDoc
@SnakeDoc的链接已经失效了。exe4j可能已经更名为install4j?请访问http://www.ej-technologies.com/products/install4j/overview.html。 - akauppi
@akauppi 这是一个更新后的链接:http://www.ej-technologies.com/download/exe4j/files - SnakeDoc
@akauppi Install4j可以构建一个带有安装向导的安装程序,并且可以完成许多任务。exe4j则可以构建一个.exe文件,您可以直接启动应用程序而无需进行安装(类似于Minecraft.exe)。 - SnakeDoc
感谢澄清。即便如此,该链接已经过时。现在应该使用:https://www.ej-technologies.com/download/exe4j/files(注意:需要商业许可证)。 - akauppi
13个回答

0

我发现Enigma Projector x86 / x64比BoxedApp Packer更好

如果您通过packr获得了软件miminizejre,那么请将您的应用程序myapp.jar复制到launcher \ jre \ bin \中

并从已安装的jre示例C:\ Program Files \ Files \ Java \ 1.8.0_xxx \ bin \ javaw.exe复制到launcher \ jre \ bin \中

打开Enigma Protector输入 ->来自launcher \ jre \ bin \的javaw.exe

如果您想要高压缩,请转到选项 找到杂项 ->命令行“-jar myapp.jar”

然后点击保护并等待整个dll和jar进入exe

确保您的myapp.jar应该由Eclipse生成,并带有“将所需库打包到生成的JAR中”,因为如果您导入了许多库,例如lwjgl或JavaFX,则必须检查嵌入式javaw_protected.exe是否包含重要文件,例如资产。

但是BoxedApp Packer也是一样的,只不过比Engima Protector稍微大一点。Protector几乎是最好的小型嵌入式javaw.exe与资产/资源。然后他们就无法破解jar文件...我希望您能够将自己的jar转换为exe,而且不到4 mb,没有lib目录 - 如果您遇到jvm.cfg错误消息的问题,这意味着您没有将嵌入式exe复制到jre或jdk的根目录中

请确保嵌入式exe在jre或jdk根目录之外。

如果您使用Protector x86,则需要使用i586,如果您使用Protector x64,则需要使用jre x64

如果您使用Protector x64与jre x86/i386 - 没有问题。它可以正常工作。

此致敬礼

//编辑:

更新的新版本EXCELSIOR JET + VIRTUAL BOX或PROTECTOR几乎是最好的“嵌入式应用程序”

查看youtube:https://www.youtube.com/watch?v=ctbIxq-1MGE


0

0

Install4j是一个非常适合这种目的的工具。此外,您还可以查看JSmooth或launch4j-尽管我曾尝试使用JSmooth捆绑jres,但未能成功。


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