如果我有Java源文件(* .java)或类文件(* .class),如何将其转换为.exe文件?
我的程序也需要安装程序。
如果我有Java源文件(* .java)或类文件(* .class),如何将其转换为.exe文件?
我的程序也需要安装程序。
Answers:
Java Packager工具可编译,打包并准备Java和JavaFX应用程序以进行分发。javapackager命令是命令行版本。
– Oracle文档
该javapackager
实用程序随JDK一起提供。它可以生成带有该-native exe
标志的.exe文件,等等。
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是一个Java可执行包装器。它为Java应用程序创建本机Windows启动器(标准.exe)。由于它能够自行查找任何已安装的Java VM,因此它使Java部署更加流畅和用户友好。
– JSmooth的网站
JSmooth是开源的,具有功能,但是它很旧。最新版本是2007年。
JexePack是一个命令行工具(非常适合自动编写脚本),使您可以将Java应用程序(类文件)及其资源(如GIF / JPG / TXT / etc)打包到单个压缩的 32位Windows EXE中,它使用Sun的Java Runtime Environment运行。控制台和窗口应用程序均受支持。
– JexePack网站
JexePack是试用软件。生产时需要付款,并且使用此工具创建的exe文件将显示“提醒”而无需付款。此外,最新版本是2013年。
InstallAnywhere使开发人员可以轻松地为任何平台创建专业的安装软件。借助InstallAnywhere,您将快速适应行业变化,更快进入市场并提供引人入胜的客户体验。在发货之前,请了解项目的OSS组件的漏洞。
– InstallAnywhere的网站
InstallAnywhere是一个商业/企业软件包,可为基于Java的程序生成安装程序。它可能能够创建.exe文件。
作为.exe文件的替代方法,您可以通过在JAR清单中添加一个入口点来创建双击时自动运行的JAR文件。
Excelsior的文章“ 将Java转换为EXE –为什么,何时,何时不是以及如何 ” 是有关此主题的绝佳信息来源。
另请参见配套文章“ 最佳的JAR到EXE的转换工具,免费和商用 ”。
更新: 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应用程序的最佳方法是什么? ”
您可以使用以下代码制作批处理文件:
start javaw -jar JarFile.jar
并使用任何.bat到.exe转换器将.bat转换为.exe。
最新的Java Web Start已得到增强,以允许良好的脱机操作以及“本地安装”。值得研究。
EDIT 2018:Java Web Start不再与最新的JDK捆绑在一起。Oracle正在推动“使用封闭的JRE在本地部署应用程序”模型。
我可以原谅我反对将Java程序转换为.exe应用程序,我有我的理由。主要的一个原因是,可以从许多IDE将Java程序编译为jar文件。当程序为.jar格式时,它可以在多个平台上运行,而.exe则只能在非常有限的环境中运行。我的想法是除非非常必要,否则Java程序不应该转换为Exe。当它是一个jar文件时,总是可以编写运行Java程序的.bat文件。
如果确实需要将其转换为exe,则Jar2Exe转换器会自动执行该操作,并且还可以附加与主应用程序一起编译的库。