如果我有Java源文件(*.java)或类文件(*.class),如何将其转换为.exe文件?
我还需要一个安装程序。
如果我有Java源文件(*.java)或类文件(*.class),如何将其转换为.exe文件?
我还需要一个安装程序。
当前回答
更新:GCJ死了。它于2016年正式从海湾合作委员会项目中移除。甚至在此之前,它实际上已经被废弃了7年之久,而且无论如何,它都不够完整,无法作为可行的Java实现替代方案。 去找另一个Java AOT编译器。
GCJ: GNU Java编译器可以将Java源代码编译成本机机器码,包括Windows可执行文件。
虽然GCJ并不支持Java中的所有内容,特别是GUI组件(请参阅GCJ 支持哪些Java API ?支持有多完整?FAQ中的问题)。我很少使用GCJ,但从我对控制台应用程序所做的有限测试来看,它似乎还不错。
使用GCJ创建独立可执行文件的一个缺点是,生成的EXE的大小可能相当大。有一次我在GCJ中编译了一个简单的控制台应用程序,结果是一个大约1 MB的可执行文件(可能有我不知道的方法)。另一个选择是可执行的压缩程序。)
在开源安装程序方面,Nullsoft Scriptable Install System是一个可脚本的安装程序。如果您感到好奇,可以参考用户提供的示例,了解如何检测JRE的存在并在未安装所需JRE时自动安装JRE。(只是想让你知道,我以前没有用过NSIS。)
有关使用NSIS安装Java应用程序的更多信息,请参阅我对“分发Java应用程序的最佳方式是什么?”这个问题的回答。
其他回答
如果您需要将整个应用程序转换为本机代码,即EXE加dll,有ExcelsiorJET。我发现它工作得很好,并提供了捆绑JRE的替代方案。
编辑:这是在2010年发布的-该产品已不再可用。
最新的Java Web Start已得到增强,以支持良好的脱机操作以及“本地安装”。这是值得研究的。
EDIT 2018: Java Web Start不再与最新的JDK绑定。甲骨文正在推动一种“使用封闭的JRE在本地部署应用程序”的模式。
Javapackager
Java Packager工具编译、打包和准备Java和JavaFX应用程序以供分发。javapackager命令是命令行版本。 - Oracle的文档
javapackager实用程序随JDK一起发布。它可以生成带有-native exe标志的.exe文件,还有许多其他功能。
WinRun4J
WinRun4j是windows的java启动器。它是javaw.exe的替代品,具有以下优点: 使用INI文件指定类路径、主类、虚拟机参数、程序参数。 出现在任务管理器中的自定义可执行名称。 额外的JVM参数用于更灵活的内存使用。 内置的图标替换自定义图标。 [后面还有更多要点] - WinRun4J的网页
WinRun4J是一个开源实用程序。它有很多特点。
packr
打包JAR、资产和JVM,以便在Windows、Linux和Mac OS X上分发,添加本机可执行文件,使其看起来像本机应用程序。Packr最适合GUI应用程序。 - packr README
Packr是另一个开源工具。
吉斯穆斯
JSmooth是一个Java可执行包装器。它为您的java应用程序创建本机Windows启动程序(标准的.exe)。它使java部署更加流畅和用户友好,因为它能够自己找到任何已安装的java VM。 - JSmooth网站
JSmooth是开源的,也有一些特性,但是它非常古老。上一次发布是在2007年。
JexePack
JexePack是一个命令行工具(非常适合自动编写脚本),允许您打包Java应用程序(类文件),可选地连同它的资源(如GIF/JPG/TXT/等),到一个压缩的32位Windows EXE,它使用Sun的Java运行时环境运行。控制台和窗口应用程序都受到支持。 - JexePack的网站
JexePack是试用软件。生产使用需要付费,使用此工具创建的exe文件将显示“提醒”而无需付费。而且,上一次发布是在2013年。
InstallAnywhere
InstallAnywhere使开发人员可以轻松地为任何平台创建专业的安装软件。使用InstallAnywhere,您将快速适应行业变化,更快地进入市场,并交付引人入胜的客户体验。并且在发布之前了解项目OSS组件的脆弱性。 - InstallAnywhere网站
InstallAnywhere是一个为基于java的程序生成安装程序的商业/企业包。它可能能够创建.exe文件。
可执行JAR文件
作为.exe文件的替代方案,您可以通过向JAR清单添加一个入口点来创建一个在双击时自动运行的JAR文件。
欲了解更多信息
Excelsior的文章“将Java转换为EXE -为什么,何时,何时不和如何”是关于这个主题的一个很好的信息来源。
另请参阅配套文章“最佳JAR到EXE转换工具,免费和商业”。
我们正在使用Install4J为windows或unix环境构建安装程序。
它很容易定制,直到您想要为标准对话框无法完成的特殊操作编写脚本。但是即使我们用它来设置windows服务,我们也只是使用标准组件。
安装程序+启动程序 Windows或Unix Java脚本 ant任务 大量可定制的标准面板和操作 可选地包括或下载JRE 还能启动Windows服务吗 多种语言
我认为Launch4J来自同一家公司(只有启动器-没有安装程序)。
PS:很遗憾我没有得到这个代言的报酬。我只是喜欢那个工具。
注意:自第一次提出这个问题以来,打包和部署已经发生了很大变化。给出的大多数答案甚至都不是JIGSAW (Java 9+)的最新版本。
如果目标是创建特定于操作系统的包,Oracle Docs Java 17打包工具用户指南中提供了相关信息。本指南包括jpackage工具的文档,该工具允许为Linux、macOS和Windows创建特定于平台的包。我认为Windows特定的指令应该包括生成.exe文件,因为这仍然是Windows用户安装和运行应用程序最熟悉的方式。
My own personal experience creating an exe (for sale on itch.io) was with the Java Platform, Standard Edition Deployment Guide, which included making use of the tool Inno Setup 5. This documentation is older, is for Java 9. The section directly pertaining to .exe packaging is located here As a first step, I used jlink to make a self-contained package. At the time I was first wrangling with this, I was unable to figure out how to get jpackage to work with my modular program. But now that Jigsaw has been around for several years, jpackage is now likely much easier to use, and would be my first choice for the next Java app I might publish for Windows users.