如何将我的Java程序转换为.exe文件?

时间:2008-09-29 01:23:59

标签: java installer exe

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

我还需要一个程序安装程序。

15 个答案:

答案 0 :(得分:310)

javapackager

  

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

     

- Oracle的文档

javapackager实用程序随JDK一起提供。它可以生成带有-native exe标志的.exe文件,以及许多其他内容。

WinRun4J

  

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

     
      
  • 使用INI文件指定classpath,main class,vm args,program args。
  •   
  • 任务管理器中显示的自定义可执行文件名称。
  •   
  • 其他JVM参数可以更灵活地使用内存。
  •   
  • 自定义图标的内置图标替换。
  •   
  • [更多要点关注]
  •   
     

- WinRun4J的网页

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

packr

  

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

     

- packr README

packr是另一个开源工具。

JSmooth

  

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

     

- JSmooth的网站

JSmooth是开源的,具有功能,但它已经很老了。最后一个版本发布于2007年。

JexePack

  

JexePack 是一个命令行工具(非常适合自动脚本编写),允许您打包Java应用程序(类文件),可选地连同其资源(如GIF / JPG / TXT / etc) ,使用Sun的Java运行时环境运行的单个压缩 32位Windows EXE。支持控制台和窗口应用程序。

     

- JexePack的网站

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

InstallAnywhere

  

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

     

- InstallAnywhere的网站

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

可执行JAR文件

作为.exe文件的替代方案,您可以创建一个JAR文件,在adding an entry point to the JAR manifest双击时自动运行。


了解更多信息

有关此主题的最佳信息来源是Excelsior的文章“Convert Java to EXE – Why, When, When Not and How”。

另请参阅配套文章“Best JAR to EXE Conversion Tools, Free and Commercial”。

答案 1 :(得分:107)

Launch4j

  

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

     

- Launch4j的网站

答案 2 :(得分:33)

  

更新: GCJ已经死了。它是2016年海湾合作委员会项目的officially removed。甚至在此之前,它实际上已经放弃了七年,无论如何它was never sufficiently complete都可以作为一种可行的替代Java实施。

     

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

GCJ: The GNU Compiler for Java可以将Java源代码编译为本机机器代码,包括Windows可执行文件。

尽管GCJ不支持Java中的所有内容,尤其是GUI组件(请参阅 来自What Java API's are supported? How complete is the support?FAQ问题。我没有太多使用GCJ,但是从我对控制台应用程序进行的有限测试来看,它看起来很好。

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

就开源安装程序而言,Nullsoft Scriptable Install System是一个可编写脚本的安装程序。如果您感到好奇,有user contributed examples如何检测是否存在JRE,并在未安装所需的JRE时自动安装。 (只是为了让你知道,我之前没有使用过NSIS。)

有关使用NSIS安装Java应用程序的更多信息,请查看my response以获取问题“What's the best way to distribute Java applications?

答案 3 :(得分:23)

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

start javaw -jar JarFile.jar

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

答案 4 :(得分:16)

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

它可以轻松定制,直到您想要为标准对话无法完成的特殊操作编写脚本。但即使我们使用它设置Windows服务,我们也只使用标准组件。

  • installer + launcher
  • windows或unix
  • Java编写脚本
  • ant task
  • 许多可自定义的标准面板和操作
  • 可选择包含或下载JRE
  • 也可以启动Windows服务
  • 多种语言

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

PS:遗憾的是,我没有得到这份代言的报酬。我只是喜欢那个工具。

答案 5 :(得分:15)

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

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

答案 6 :(得分:9)

恕我直言JSmooth似乎做得很好。

答案 7 :(得分:9)

如果您需要将整个应用程序转换为本机代码,即EXE加DLL,则有ExcelsiorJET。我发现它运行良好,并提供了捆绑JRE的替代方案。

答案 8 :(得分:6)

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

答案 9 :(得分:5)

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

答案 10 :(得分:4)

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

答案 11 :(得分:3)

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

如果确实需要将它转换为exe,那么Jar2Exe转换器会默默地执行此操作,并且还可以附加与主应用程序一起编译的库。

答案 12 :(得分:2)

您可以使用jar2exe将jar转换为exe。但是,您需要购买该软件。如果您需要开源软件,我建议JSmooth

答案 13 :(得分:0)

从 JDK14 开始,jpackage 替换了 @Jay 回答中提到的 javapackager。 Windows 版本需要 Wix 3.0,使用 Java 应用程序并构建提供 EXE 启动器的安装程序相当简单。

它还可以与 jlink 一起使用来构建一个精简的 Java 运行时映像,该映像与安装程序捆绑在一起,并且仅包含支持您的应用程序所需的一组模块。 Java 类的示例 main:

package exe;
public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println("args["+i+"]="+args[i]);
        }
    }
}

在 Windows 上构建的步骤:

mkdir jpackage.input\jars tmp
javac -d tmp src\exe\Main.java
pushd tmp && jar cvf ..\jpackage.input\jars\myapp.jar . && popd

检查它是否运行:

java -cp jpackage.input\jars\myapp.jar exe.Main X Y Z

使用 jlink 为应用程序使用的一组模块创建运行时映像:

set jlink.modules=java.base
jlink --add-modules %jlink.modules% --strip-debug --no-man-pages --no-header-files --compress=1 --output jpackage.jre

使用 jpackage 生成安装程序,应用版本基于日期+小时和所有系统属性 - 测试后删除参数“-XshowSettings:properties”:

set appver=%date:~6,2%.%date:~3,2%.%date:~0,2%%time:~0,2%
jpackage --win-console --input jpackage.input --runtime-image jpackage.jre --app-version %appver% --type exe --name "MyApp" --dest jpackage.dest --java-options "-XshowSettings:properties" --main-jar jars\myapp.jar --main-class exe.Main

运行安装程序:

jpackage.dest\MyApp-%appver%.exe

测试应用程序:

"C:\Program Files\MyApp\MyApp.exe" ONE 2 THREE

... Prints system properties ...

args[0]=ONE
args[1]=2
args[2]=THREE

答案 14 :(得分:-1)

Java项目导出为Jar可执行文件。当您想执行Java项目的.exe文件时,可以执行的操作是将JAR“转换”为EXE(我说我把引号放在转换之间是因为这不完全是这样)。

在intelij中,您将只能生成jar

尝试遵循下一个示例:https://www.genuinecoder.com/convert-java-jar-to-exe/