假设我想分发Java应用程序。
假设我想将其作为单个可执行文件分发。我可以轻松地将一个.jar与应用程序及其所有外部依赖项一起构建在一个文件中(使用一些Ant黑客攻击)。
现在假设我想在Windows上将其作为.exe文件分发。这很容易,因为有很好的工具(比如Launch4j等)。
但现在假设我也不想依赖最终用户安装正确的JRE(或任何JRE)。我想用我的应用程序分发JRE,我的应用程序应该在这个JRE上运行。创建Windows安装程序可执行文件并嵌入包含所有必需JRE文件的文件夹非常简单。但后来我发布的是安装程序而不是单文件应用程序。
有没有办法将应用程序和嵌入到作为应用程序启动器的.exe文件中(而不是作为安装程序)?
答案 0 :(得分:24)
答案 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:
哪个.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)
另一个例子...... Bundle Java (the JRE) and Launch a Java App with 7zip SFX! ... (Convert Java Apps to an Executable, sort of)
答案 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)
我写了一个具有以下内容的解决方案:
由于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.
答案 9 :(得分:0)
JSmooth可以根据文档做到这一点。我只是在没有嵌入式JRE的情况下尝试过,但非常满意。它可以用ant编写脚本,我们在Linux上构建。
答案 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几乎是最好的"嵌入式应用程序"