在Windows上运行一个Java程序而不需要安装JRE

18

我希望在Windows上将一个Java程序作为.exe文件运行。该计算机没有安装Java...

那么,有没有其他方式可以将Java程序转换为.exe文件,从而避免对JRE的依赖?

9个回答

9

您可以将JRE与应用程序一起发布,并使用该JRE来运行您的应用程序。其效果相同:应用程序将通过可执行文件(需要包装器)或脚本(批处理)文件启动,并且目标计算机不需要安装Java运行时。

Java并不需要被“安装”,它只需要存在即可。


你能做到吗?合法的方式?根据我的经验,Oracle不允许Linux发行版包含JRE。我想应用程序也有类似的分发问题。 - Rich Remer
这是标准的做法。 - Aniket Sahrawat

8

1
2023年:这个域名似乎正在出售。主题似乎已过时、错误或不完整:(而这个问题真是太好了! - f b

1
为了运行该应用程序,您需要安装运行时。实际上,当您启动应用程序时,首先发生的事情是调用操作系统以启动 JRE。没有 JRE 您将无法继续。如果您想要,当然可以将 JRE 嵌入到应用程序本身中。

据我所知,你说得没错,但我很好奇;为什么会这样呢?有几个不同的工具(例如py2exe)可以将Python解释器与安装程序一起打包。 - Imagist
1
虚拟机的整个意义在于您希望将应用程序与底层操作系统分离。另一个例子是垃圾回收。如果没有人监视应用程序并在对象超出范围时释放内存,那么垃圾回收是不可能正常工作的。这是由JRE完成的。 - Sesh
@Sesh 其他答案已经证明这是错误的。需要的是JRE的替代品(其他答案所涉及的内容)。JRE并没有什么神奇之处;你可以有一个替代引擎来执行像垃圾回收这样的任务。 - Patrick

1

我使用了JSmooth来将我的应用程序打包成exe文件。它还允许在内部嵌入JRE。我只是使用了“确保至少有Java X可用”的选项。

GPL,可以作为ant任务运行。


1
如果您使用JDK 9及以上版本,则可以使用jlink。它将包含所有必要的模块、头文件、安全策略文件等,并构建一个最小运行时映像。此映像可直接发送给客户。您可以指定自己的启动器等。jlink工具可用于组装和优化一组模块及其依赖项,以创建自定义运行时映像。请参阅oracle文档:Java平台标准版工具参考中的更多信息。

1

考虑到您正在Windows中请求可执行文件(exe),有另一种方法:

使用IKVM.NET - Bytecode Compiler,将Java字节码转换为.NET dll和exe。

这里获取最新版本的IKVM.NET。

使用此命令:

 ikvmc -target:exe -out:foo.exe yourJarFile.jar

创建你的.NET可执行文件。

此后,你可以使用必要的IKVM dll文件来使用你的exe,或者如果你想要一个单独的可执行文件,你可以使用ILMerge

ILMerge.exe /target:winexe /targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1" /out:C:\foo\bar.exe foo.exe <IKVM dll's>.dll

这对我来说很有效。除了IKVM似乎在较新版本的Java上有问题。我不得不更改我的目标Java版本。此外,它似乎只能生成带有.NET版本3.5的二进制文件(我更喜欢.NET 2)。 - Patrick

0

GCJ 可以从 Java 源文件创建本地代码。这里 有一个关于如何在 Windows 上构建它的教程。


1
你能告诉我,GCJ对Java 1.5和1.6的特性处理得如何? - Vanya
1
据我所知,它只能在JDK 1.4上运行,这太糟糕了。 - Cinder6
GCJ 已经死了很多年,包括发布此文的那一年。 - user207421

0
你尝试过 install4j 吗?这个概念有各种版本,其中一些是免费的。基本上,这个应用程序将你的应用程序编译成一个可执行的安装程序,特定于你选择的操作系统。

0
最简单的方法是使用 launch4j 来创建 Windows 可执行文件包装器,然后使用 inno setup 创建安装程序。在为应用程序创建安装程序时,请将文件夹添加到 其他应用程序文件 下。确保 jre 在文件夹内。
工作完成!!!

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