将java程序编译为可执行文件

时间:2010-01-06 08:21:59

标签: java executable compilation

  

可能重复:
  How do I create an .exe for a Java program?

我刚刚用eclipse创建了一个简单的程序,我想将它编译成可执行文件,但似乎无法找到如何做到这一点。 请帮忙。

7 个答案:

答案 0 :(得分:130)

您可以通过以下方式将.jar文件转换为.exe:
alt text
1- JSmooth .exe包装器:
JSmooth是一个Java可执行包装器。它为您的Java应用程序创建本机Windows启动程序(标准.exe)。它使java部署更加顺畅和用户友好,因为它能够自己找到任何已安装的Java VM。当没有可用的VM时,包装器可以自动下载并安装合适的JVM,或者只是显示消息或将用户重定向到网站。

JSmooth为你的java应用程序提供了各种包装器,每个包装器都有自己的行为:选择你的味道!

下载:http://jsmooth.sourceforge.net/

2- JarToExe 1.8
Jar2Exe是一个将jar文件转换为exe文件的工具。 以下是其网站中描述的主要功能:

  • 可以生成“Console”,“Windows GUI”,“Windows Service”三种类型的exe文件。
  • 生成的exe文件可以添加程序图标和版本信息。
  • 生成的exe文件可以加密和保护java程序,程序运行时不会生成临时文件。
  • 生成的exe文件提供系统托盘图标支持。
  • 生成的exe文件提供记录系统事件日志支持。
  • 生成的Windows服务exe文件可以自行安装/卸载,并支持服务暂停/继续。
  • x64版本的新版本,可以创建64位高管。 (2008年5月18日)
  • 支持向导模式和命令行模式。 (2008年5月18日)

下载:http://www.brothersoft.com/jartoexe-75019.html

3-执行者 将Java应用程序打包为jar,Executor将jar转换为Windows exe文件,与本机应用程序无法区分。只需双击exe文件即可调用Java Runtime Environment并启动应用程序。

下载:http://mpowers.net/executor/

编辑:以上链接已损坏,但这是来自Internet Archive的页面(有工作下载)。 http://web.archive.org/web/20090316092154/http://mpowers.net/executor/

4-高级安装程序
Advanced Installer允许您在几分钟内创建Windows MSI安装。这也有Windows Vista支持,也有助于用其他语言创建MSI包 下载:http://www.advancedinstaller.com/ 让我知道您用于将JAR转换为EXE的其他工具。

答案 1 :(得分:31)

我会在你的情况下使用GCJ(GNU Compiler for Java)。这是一个用于Java的AOT(提前)编译器,就像GCC用于C一样。它不是解释代码,也不是生成Java VM稍后运行的中间Java代码,而是生成机器代码。

GCJ几乎可以通过其各自的包管理器(如果可用)在任何Linux系统上使用。安装后,应将GCJ编译器添加到路径中,以便可以通过终端调用它。如果您使用的是Windows,则可以通过Cygwin或MinGW下载并安装GCJ。

但是,我强烈建议您重写另一种要编译的语言的源代码,例如C ++。 Java意味着是一种可移植的解释语言。将其编译为机器代码完全违背了为其开发的语言。

答案 2 :(得分:18)

我使用launch4j

ANT命令:

<target name="jar" depends="compile, buildDLLs, copy">
    <jar basedir="${java.bin.dir}" destfile="${build.dir}/Project.jar" manifest="META-INF/MANIFEST.MF" />
</target>

<target name="exe" depends="jar">
    <exec executable="cmd" dir="${launch4j.home}">
        <arg line="/c launch4jc.exe ${basedir}/${launch4j.dir}/L4J_ProjectConfig.xml" />
    </exec>
</target>

答案 3 :(得分:3)

我通常使用bat脚本。这是我通常使用的:

@echo off
set d=%~dp0
java -Xmx400m -cp "%d%myapp.jar;%d%libs/mylib.jar" my.main.Class %*

%~dp0提取.bat所在的目录。这允许蝙蝠找到罐子的位置,而不需要任何特殊的环境变量,也不需要设置PATH变量。

编辑:在类路径中添加了引号。否则,正如乔伊所说,“空间可能会发生有趣的事情”

答案 4 :(得分:2)

我们发现Jsmooth在Linux下运行良好且易于使用ant编写脚本。您可能希望使用one-jar(也可以使用Linux下的ant脚本轻松编写脚本)来首先在单个jar中收集多文件应用程序。

我们主要需要轻松部署EXE并结合“嘿,你需要Java版本X,去这里下载”设施。

(但您最需要的是标准Java中的“Runnable jar”/“Executable jar”工具。)

答案 5 :(得分:1)

你可以做的是创建一个.bat来执行创建的.jar文件,检查是否存在JRE。

来自Mitch实用链接(source

java -classpath myprogram.jar de.vogella.eclipse.ide.first.MyFirstClass

这可以用于您的批次...

答案 6 :(得分:0)

有少数几个程序可以做到这一点...想到TowerJ(我会让你谷歌),但它需要花费很多钱。

我找到的这个主题最有用的参考是:http://mindprod.com/jgloss/nativecompiler.html

它提到了一些其他产品,以及达到同样目的的替代品。