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

时间:2010-02-13 20:29:00

标签: java windows deployment executable software-distribution

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

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

现在假设我想在Windows上将其作为.exe文件分发。这很容易,因为有很好的工具(比如Launch4j等)。

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

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

13 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:11)

有一个新工具可以做到这一点:Packr
https://github.com/libgdx/packr

答案 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

答案 3 :(得分:4)

  

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

如果商业工具适合您,install4j可以非常顺利地解决此问题(请参阅其"Features" page)。它可以生成两个应用程序启动器和安装程序。

我不想过多地重复自己,所以请检查一下我插入它的this earlier answer(作为安装程序构建器,但这里没有太大区别)。

摘要/底线:install4j可以创建完全依赖于预先安装的JRE(或任何其他特定库)的 not 的本机.exe启动器,并且它提供了灵活的捆绑选项(和检测)JRE。

答案 4 :(得分:3)

Netbeans允许将Java SE项目打包在本机应用程序安装程序中,嵌入JRE。 就在这里:https://netbeans.org/kb/docs/java/native_pkg.html:)

答案 5 :(得分:3)

我自己遇到问题后-

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

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

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

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

4)使用蝙蝠到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文件

答案 6 :(得分:1)

答案 7 :(得分:1)

我知道我对这个派对来说有点晚了,但看起来像ej-technologies(喜欢他们的东西)有一个名为exe4j的新解决方案,它将完全按照OP的要求完成,而不需要任何有趣的业务

http://www.ej-technologies.com/products/exe4j/overview.html

如果您在OpenSource项目中工作,他们会提供免费许可(您只需要与他们联系)。如果它是一个商业项目,那么需要许可证......但是许可证的价格是69美元,而且非常便宜且值得购买。

从他们的网站:

If you want your own process name instead of java.exe in the task manager
and a user friendly task-bar grouping, exe4j does the job for you.

exe4j helps you with starting your Java applications in a safe way, displaying
native splash screens, detecting or distributing suitable JREs and JDKs,
startup error handling and much more.

答案 8 :(得分:1)

我写了一个具有以下内容的解决方案:

  • 它仅编译为一个仅调用jre的小exe文件(30 kb)
  • 您可以从一个独立的cpp文件编译一次exe(您需要修改cpp文件,用您自己的类名替换“ com.example.MyApplication”)
  • 选择一个图标,它将被嵌入到exe文件中
  • 完成的exe文件现在是您的Java启动器,它将捕获java.exe的所有错误,并在启动失败时显示一个信息对话框
  • 没有控制台窗口

由于exe文件非常小,因此您可以构建一次并将其放入存储库。除非您重命名Java主类或想要更改图标,否则无需更新它。

您部署的应用程序如下所示:

app_root/
    myapp.exe        # the launcher created by this project
    jre/             # the bundled JRE, created by jlink
    lib/
        MyApp.jar    # your Java application
        ...          # any third-party libraries, etc.

您可以在此处查看:https://github.com/foolo/windows-jre-laucher

答案 9 :(得分:0)

JSmooth可以根据文档做到这一点。我只是在没有嵌入式JRE的情况下尝试过,但非常满意。它可以用ant编写脚本,我们在Linux上构建。

http://jsmooth.sourceforge.net/features.php

答案 10 :(得分:0)

你可以看看: http://ulibgcj.sourceforge.net/uswt.html 它有micro-swt库,可以使用SWT轻松构建GUI 并查看Eclipse GCJ Builder

答案 11 :(得分:0)

Install4j是一个很好的工具,可以解决这个问题。也可以查看JSmooth或者launch4j-all虽然我试图将jres与JSmooth捆绑在一起但是无法...

答案 12 :(得分:0)

我发现Engima 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 \

打开Engima Protector输入 - >来自launcher \ jre \ bin \

的javaw.exe

如果您想要高压缩,请选择选项 查找杂项 - >命令行" -jar myapp.jar"

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

确保你的myapp.jar应该由Eclipse生成"将所需的包打包到生成的JAR"因为您不必担心如果您导入了许多库示例lwjgl或JavaFX,那么您必须检查嵌入式javaw_protected.exe是否包含重要文件示例资产。

但BoxedApp Packer也是如此,BoxedApp Packer比Engima Protector大一点。保护器几乎是最好的小嵌入javaw.exe与资产/资源。他们不能破解jar文件...我希望你对自己的jar很满意,因为没有lib目录的4 mb更少 - 如果你有jvm.cfg的问题错误信息这意味着你不要复制嵌入式exe到jre或jdk的根目录

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

如果你使用Protector x86而不是需要使用i586,保护x64 for jre x64,我希望你没有问题

如果你使用带有jre x86 / i386的Protector x64 - 没关系没问题。它工作正常。

祝你好运

//编辑:

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

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