如何将Java程序转换为.exe文件?[关闭]


500

如果我有Java源文件(* .java)或类文件(* .class),如何将其转换为.exe文件?

我的程序也需要安装程序。


1
小应用程序的简单技巧:编写一个C语言代码,其中包含main和对像系统(“ appletviewer java_src_file”)之类的“系统”函数的调用;
Madhusoodan P

1
.exe是否可以在没有JRE的Windows系统中工作?
Arpit Agarwal

只是为了完整(不要自己尝试,因为我们需要exe包装器,而不是安装程序):安装程序包也可以使用javapackager创建(请参阅docs.oracle.com/javase/8/docs/technotes/guides/deploy/…) 。要创建EXE或MSI安装程序,还需要下载并安装Inno Setup或WiX。
ANRE

Answers:


324

javapackager

Java Packager工具可编译,打包并准备Java和JavaFX应用程序以进行分发。javapackager命令是命令行版本。

– Oracle文档

javapackager实用程序随JDK一起提供。它可以生成带有该-native exe标志的.exe文件,等等。

WinRun4J

WinRun4j是Windows的Java启动器。它是javaw.exe的替代方法,具有以下优点:

  • 使用INI文件指定类路径,主类,vm args,程序args。
  • 显示在任务管理器中的自定义可执行文件名称。
  • 其他JVM arg用于更灵活的内存使用。
  • 自定义图标的内置图标替换器。
  • [后面有更多要点]

– WinRun4J的网页

WinRun4J是一个开源实用程序。它具有许多功能。

封隔器

打包您的JAR,资产和JVM,以在Windows,Linux和Mac OS X上分发,添加本机可执行文件以使其看起来像本机应用程序。Packr最适合GUI应用程序。

– Packr自述文件

packr是另一个开源工具。

JSmooth

JSmooth是一个Java可执行包装器。它为Java应用程序创建本机Windows启动器(标准.exe)。由于它能够自行查找任何已安装的Java VM,因此它使Java部署更加流畅和用户友好。

– JSmooth的网站

JSmooth是开源的,具有功能,但是它很旧。最新版本是2007年。

Jexe包

JexePack是一个命令行工具(非常适合自动编写脚本),使您可以将Java应用程序(类文件)及其资源(如GIF / JPG / TXT / etc)打包到单个压缩的 32位Windows EXE中,它使用Sun的Java Runtime Environment运行。控制台和窗口应用程序均受支持。

– JexePack网站

JexePack是试用软件。生产时需要付款,并且使用此工具创建的exe文件将显示“提醒”而无需付款。此外,最新版本是2013年。

InstallAnywhere

InstallAnywhere使开发人员可以轻松地为任何平台创建专业的安装软件。借助InstallAnywhere,您将快速适应行业变化,更快进入市场并提供引人入胜的客户体验。在发货之前,请了解项目的OSS组件的漏洞。

– InstallAnywhere的网站

InstallAnywhere是一个商业/企业软件包,可为基于Java的程序生成安装程序。它可能能够创建.exe文件。

可执行的JAR文件

作为.exe文件的替代方法,您可以通过在JAR清单中添加一个入口点来创建双击时自动运行的JAR文件。


欲获得更多信息

Excelsior的文章“ 将Java转换为EXE –为什么,何时,何时不是以及如何 ” 是有关此主题的绝佳信息来源。

另请参见配套文章“ 最佳的JAR到EXE的转换工具,免费和商用 ”。


最好使用eclipse和Jsmooth。请按照以下步骤regilanj.wordpress.com/2017/11/19/...
玛丽亚Irudaya RegilanĴ

这些方法是否适合我的情况?stackoverflow.com/questions/56674075/…–
gunslingor


112

Launch4j

Launch4j是一个跨平台工具,用于将以jar形式分发的Java应用程序包装在轻量级Windows本机可执行文件中。可执行文件可以配置为搜索某个JRE版本或使用捆绑的版本,并且可以设置运行时选项,例如初始/最大堆大小。如果找不到合适的JRE,则该包装程序还通过应用程序图标,本机JRE之前的初始屏幕,自定义进程名称和Java下载页面提供了更好的用户体验。

– Launch4j的网站


35

更新: GCJ已死。它于2016 年正式从GCC项目中删除。甚至在此之前,它实际上已经废弃了7年,并且在任何情况下它都还不够完善,无法用作可行的Java替代实现。

去寻找另一个Java AOT编译器。

GCJ:适用于Java的GNU编译器可以将Java源代码编译成本机代码,包括Windows可执行文件。

尽管GCJ并不支持Java中的所有功能,尤其是GUI组件(请参阅 FAQ中的“支持哪些Java API?支持的完整性如何?问题)。我没有使用GCJ太多,但是从我对控制台应用程序所做的有限测试来看,它似乎还不错。

使用GCJ创建独立可执行文件的一个缺点是生成的EXE的大小可能会很大。一次,我在GCJ中编译了一个简单的控制台应用程序,结果得到了大约1 MB的可执行文件。(可能有一些我不知道的解决方法。另一种选择是可执行压缩程序。)

就开源安装程序而言,Nullsoft可脚本安装系统是可脚本安装程序。如果您好奇,可以找到一些用户贡献的示例,这些示例介绍了如何检测JRE的存在并在未安装所需的JRE的情况下自动安装它。(只是让您知道,我以前没有使用过NSIS。)

有关使用NSIS安装Java应用程序的更多信息,请查看我对以下问题的回答:“ 分发Java应用程序的最佳方法是什么?


2
如我所见,项目实际上已经死了。主页上没有新闻
Vladislav Rastrusny 2014年

由于非Oracle源无法访问TCK进行验证,因此GNU Java开发已几乎移至OpenJDK。
托尔比约恩Ravn的安徒生

25

您可以使用以下代码制作批处理文件:

start javaw -jar JarFile.jar

并使用任何.bat到.exe转换器将.bat转换为.exe。


2
好的包装器可以带上JRE,也可以在需要时安装它并处理错误情况。
托尔比约恩Ravn的安徒生

16

我们正在使用Install4J为Windows或UNIX环境构建安装程序。

它很容易自定义,直到您要为标准对话无法完成的特殊动作编写脚本。但是,即使我们使用它来设置Windows服务,我们也只使用标准组件。

  • 安装程序+启动器
  • Windows或Unix
  • 用Java编写脚本
  • 蚂蚁任务
  • 许多可定制的标准面板和动作
  • (可选)包括或下载JRE
  • 也可以启动Windows服务
  • 多种语言

我认为Launch4J来自同一家公司(只是启动器-没有安装程序)。

PS:可悲的是,我没有为此获得报酬。我只是喜欢那个工具。


15

最新的Java Web Start已得到增强,以允许良好的脱机操作以及“本地安装”。值得研究。

EDIT 2018:Java Web Start不再与最新的JDK捆绑在一起。Oracle正在推动“使用封闭的JRE在本地部署应用程序”模型。


显然,JWS已非常严格地加强了安全性,因此与以前相比,它需要付出更多的精力才能运行。但是,它对于安装程序可能仍然有用。
托尔比约恩Ravn的安徒生

9

如果您需要将整个应用程序转换为本地代码,即EXE和DLL,则可以使用ExcelsiorJET。我发现它很好用,并提供了捆绑JRE的替代方法。


真的很贵。
Mordechai 2015年


6

我会说launch4j是将Java源代码(.java)转换为.exe文件的最佳工具。您甚至可以将jre与它捆绑在一起进行分发,甚至可以将exe图标化。尽管应用程序的大小增加了,但是即使用户没有安装jre,它也可以确保应用程序正常运行。它还可以确保您能够提供应用所需的特定jre,而无需用户单独安装。但是不幸的是,java失去了它的重要性。它的多平台支持被完全忽略,最终应用仅受Windows支持。但这不是什么大问题,如果您只针对Windows用户。


5

您可以使用Janel。最后一个用作应用程序启动器或服务启动器(从4.x开始可用)。


4

或者,您可以使用一些Java到C的转换器(例如JCGO)并将生成的C文件编译为目标平台的本机二进制(.exe)文件。


2
我对这种方法的效率非常怀疑。我必须看到它才能相信它(想想大多数Java代码是对JRE的API调用,而所有这些都不存在于C上,请不要理会该语言的工作方式上的差异)。
卡米洛·马丁

3

我可以原谅我反对将Java程序转换为.exe应用程序,我有我的理由。主要的一个原因是,可以从许多IDE将Java程序编译为jar文件。当程序为.jar格式时,它可以在多个平台上运行,而.exe则只能在非常有限的环境中运行。我的想法是除非非常必要,否则Java程序不应该转换为Exe。当它是一个jar文件时,总是可以编写运行Java程序的.bat文件。

如果确实需要将其转换为exe,则Jar2Exe转换器会自动执行该操作,并且还可以附加与主应用程序一起编译的库。


事实是,java的强大之处在于可移植性,但是很多人只需要一个基本的Windows exe。就个人而言,我喜欢Java的概念...但是我想分发一些我的用户可以运行的东西,而不必下载JRE。
Balmipour

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.