如何将.jar文件转换为.exe文件?

55

我想将一个 .jar 文件转换成 .exe 文件,以便在微软系统中使用。是否有专门的转换程序可以使用?

如果针对 Mac 和 Linux 也有相应的转换程序,我也很感激能够提供相关建议。


12
抱歉,我不太理解您的请求。请提供更多上下文或详细说明需要翻译的内容。 - TheLQ
答案中有一个有趣的链接,其中讨论了与此处答案中提到的软件相关的主题。 - Steve-o
1
我希望我能给TheLQ声誉,因为他说GCJ很糟糕。 - Tim Bender
类似于这个问题,可以尝试使用现在JDK的一部分的jpackage。 - DuncG
7个回答

43

Launch4j 可以同时在 Windows 和 Linux/Mac 上使用。但是,如果您正在运行 Linux/Mac,则可以将您的 jar 文件嵌入到一个 shell 脚本中,该脚本会自动启动它,因此您只需要一个可运行文件:

exestub.sh:

#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt  0 -a -f "$0" ] && MYSELF="./$0"
JAVA_OPT=""
PROG_OPT=""
# Parse options to determine which ones are for Java and which ones are for the Program
while [ $# -gt 0 ] ; do
    case $1 in
        -Xm*) JAVA_OPT="$JAVA_OPT $1" ;;
        -D*)  JAVA_OPT="$JAVA_OPT $1" ;;
        *)    PROG_OPT="$PROG_OPT $1" ;;
    esac
    shift
done
exec java $JAVA_OPT -jar $MYSELF $PROG_OPT
然后,您可以从JAR文件创建可运行文件:
$ cat exestub.sh myrunnablejar.jar > myrunnable
$ chmod +x myrunnable

它的工作方式与launch4j相同:因为jar文件具有zip格式,其头部位于文件末尾。您可以拥有任何想要的头部(二进制可执行文件或像这里一样的shell脚本)并运行java -jar <myexe>,因为<myexe>是一个有效的zip / jar文件。


16

JSmooth .exe包装器

JSmooth是一个Java可执行文件包装器。它为您的Java应用程序创建本地Windows启动器(标准.exe)。它能够自行查找任何已安装的Java VM,从而使Java部署更加顺畅和用户友好。当没有VM可用时,包装器可以自动下载和安装适当的JVM,或者仅显示消息或将用户重定向到网站。

JSmooth为您的Java应用程序提供各种包装器,每个包装器都有其自己的行为:选择您的口味!

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

JarToExe 1.8

JarToExe是一款将jar文件转换为exe文件的工具。 以下是其网站上描述的主要功能:

可以生成“控制台”、“Windows GUI”、“Windows服务”三种类型的.exe文件。

生成的.exe文件可以添加程序图标和版本信息。 生成的.exe文件可以加密和保护Java程序,程序运行时不会生成临时文件。

生成的.exe文件支持系统托盘图标。 生成的.exe文件提供记录系统事件日志支持。 生成的Windows服务.exe文件能够自行安装/卸载,并支持服务暂停/继续。

Executor

将您的Java应用程序打包成jar文件,然后Executor会将该jar转换为Windows .exe文件,与本机应用程序无异。只需双击.exe文件即可调用Java Runtime Environment并启动您的应用程序。


3
你有Executor的链接吗?谷歌返回的内容与其无关。 - posfan12

7
如果您的程序是“自然公开且非商业性质”,并且有“一个满足基本质量标准的公开网站”,那么您可以尝试获取Excelsior的免费许可证。如果不是,那么它会很昂贵,但仍然是一个可行的选择。
程序:https://www.excelsiorjet.com
顺便提一下:这里有一份关于所有现有Jar到EXE程序的研究,有点令人沮丧 - https://www.excelsior-usa.com/articles/java-to-exe.html

2
更正:如果您的项目是非商业性质且面向公众开放,您可以获得免费的Excelsior JET许可证。这与其是否为开源项目无关。 - Dmitry Leskov
@Dmitry 哦,谢谢,我习惯把开源等同于公共和免费。 - TheLQ

5
尽管这违反了SO有关此类事项的一般政策,但这似乎是OP真正想要的:

http://www.google.com/search?btnG=1&pws=0&q=java+executable+wrapper

如果您愿意,还可以尝试创建适当的批处理或脚本文件,其中包含单行:

java -jar MyJar.jar

在许多情况下,只需双击可执行的jar文件即可在Windows上运行。

1
只是为了解释我为什么发布了一个谷歌链接,在 @David 编辑之前,原始问题中明确指出“请不要告诉我这很蠢或问我为什么,只给我一些链接。” - Tim Bender
之前也在stackoverflow上讨论过,链接在这里:https://dev59.com/lG865IYBdhLWcg3wkPWD - Steve-o
你不能向.bat文件添加应用程序专属图标,而且除非使用“start”命令,否则Windows命令提示符窗口将保持打开/可见状态。 - guthrie

5

我使用了Launch4J,它运行得非常顺利,

  • 首先进入你的jdk并复制bin和lib文件夹
  • 然后创建一个为你的应用程序命名的文件夹,并创建一个名为jre-(version)的文件夹,
  • 然后将这些文件夹粘贴到新建的文件夹中
  • 接着打开launch4j,输入exe文件的路径(在应用程序文件夹内)
  • 然后进入“jre”选项,在“bundled paths”下键入“jre-(version)”
  • 接着在“minimum version”选项中键入您编写代码时所使用的Java版本。
  • 然后在“jre”选项中输入“仅使用私有jdk运行时”
  • 接着点击“gear”图标。它会打开一个文件选择器。
  • 选择您的应用程序文件夹,完成
  • 现在打开生成的exe文件。它应该可以工作。

如果不能工作,请尝试测试运行按钮(绿色的播放按钮)。如果控制台下面显示“LinkageError”,则在“jvm-options”中键入--enable-preview。它应该可以工作。 希望能对您有所帮助。


2
如果你需要将.jar文件转换为.exe文件,从Java 14开始,你可以使用jpackage。
jpackage是一个命令行工具,用于创建Java应用程序的本地安装程序和软件包。
更新:
--type 要创建的软件包类型
--input 包含要打包的文件的输入目录路径
--dest 生成的输出文件放置的路径
--main-jar 包含主类的应用程序的主JAR文件
--main-class 要执行的应用程序主类的限定名称
--module-path 模块化JAR文件的路径
--add-modules 添加一系列模块
--win-shortcut 为应用程序创建桌面快捷方式
--win-menu 将应用程序添加到系统菜单
--app-version 应用程序和/或软件包的版本
--verbose 启用详细输出

--icon应用程序包的图标路径

--jlink-options --bind-services包括可用的服务提供者,其中包含应用程序的主模块和其所有依赖项。

示例

jpackage --type msi --app-version "2.0" --input . --dest . --main-jar .\JavaFXHelloWorld.jar --main-class com.example.javafxhelloworld.App --module-path "C:\Program Files\Java\javafx-jmods-17.0.1" --add-modules javafx.controls,javafx.fxml --win-shortcut --win-menu --icon "icon.ico" --name "My App" --jlink-options --bind-services

JPackage documention将会帮助你。

2
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。- 来自审查 - Dom
1
我认为jpackage只是将您的jar包打包成本地安装程序(即.msi.deb等),但程序仍然需要使用java -jar ...来运行。不过我还需要测试一下... - Matthieu
@Matthieu 不需要运行 java -jar,只需要运行命令即可。 - Ahmed Saber
@Matthieu 如果你使用 --jlink-options --bind-services,你可以在目标机器上运行你的 exemsi 文件,而无需任何 Java 依赖。 - Ahmed Saber

0

不要只发布链接。解释它们所说的基础知识。 - Matthieu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接