在Windows可执行文件中嵌入JRE?

per*_*erp 61 java windows deployment executable software-distribution

假设我想分发Java应用程序.

假设我想将它作为单个可执行文件分发.我可以轻松地将一个.jar与应用程序及其所有外部依赖项一起构建在一个文件中(带有一些Ant黑客攻击).

现在假设我想在Windows上将其作为.exe文件分发.这很简单,因为那里有很好的工具(例如Launch4j等).

但是现在假设我也不想依赖于最终用户安装了正确的JRE(或者根本就是任何JRE).我想用我的应用程序分发JRE,我的应用程序应该在这个JRE上运行.创建Windows安装程序可执行文件并嵌入包含所有必需JRE文件的文件夹非常简单.但后来我正在分发安装程序而不是单文件应用程序.

有没有办法将应用程序 JRE 嵌入到充当应用程序启动器的.exe文件中(而不是作为安装程序)?

小智 24

尝试使用AvianProGuard工具包.Avian允许在您的app中嵌入轻量级虚拟机.支持Linux,MacOS,Windows和iOS.ProGuard允许您缩小大型jar文件以准备嵌入.


And*_*ejs 12

这是一个新工具:Packr
https://github.com/libgdx/packr

  • Packr 可以工作,但是它会创建一个文件夹结构,其中包含一个 jre/ 文件夹、一个 app.exe 和您的原始 app.jar。您仍然需要创建一个安装程序来将此文件夹结构复制到 C:\Programs\ 文件夹中。此外,您的 .jar 仍在那里,它没有嵌入到 .exe 中。除此之外,它还是一个不错的工具。 (2认同)

小智 7

相当多的选择,商业上这是非常好的:

http://www.excelsior-usa.com/jet.html

有两个关键的开源选项GCJ和VMKit

http://gcc.gnu.org/java/http://vmkit.llvm.org/

其他更长的路径将包括IKVM.NET:

http://www.ikvm.net/

哪个是.NET JVM,可以静态编译为EXE


Gab*_*l H 5

我自己遇到这个问题后 -

1)创建一个包含应用程序 jar 文件的文件夹

2)创建包含jre的子文件夹

3)创建一个bat文件,该文件在应用程序使用期间覆盖环境变量并将启动您的应用程序:

REM requiered so java wont run into issues with an installed version if one exists
SETLOCAL ENABLEEXTENSIONS
SET JAVA_HOME="./jre"
"./jre/bin/java.exe" -jar "applicationName.jar"
pause
Run Code Online (Sandbox Code Playgroud)

4)使用bat到exe转换器选项包括: https ://listoffreeware.com/6-best-free-bat-exe-converter-software-windows/

第一个选项在这里可用:

https://web.archive.org/web/20190305143030/http://www.f2ko.de/downloads/Bat_To_Exe_Converter.zip

5)创建一个包含该文件夹的exe,并在运行时运行bat文件