8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Remus Rusanu 1月前

95 0

如果我有一个 Java 源文件 (*.java) 或一个类文件 (*.class),我该如何将其转换为 .exe 文件?我还需要一个程序的安装程序。

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

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

帖子版权声明 1、本帖标题:如何将我的 Java 程序转换为 .exe 文件?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Remus Rusanu在本站《user-interface》版块原创发布, 转载请注明出处!
最新回复 (0)
  • Java 项目导出为 Jar 可执行文件。当您想要制作 Java 项目的 .exe 文件时,您可以做的是将 JAR“转换”为 EXE(我注意到我将转换放在引号中,因为事实并非如此)。

    从 intelij 你只能生成 jar

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

  • 从可执行文件(如便携式应用程序)的角度来看,这实际上不是一个 .exe。这将创建一个安装程序。最接近的方法是使用带有 appimage 格式/输出的 jpackage。这将为您提供一个包含实际 .exe 的文件夹。但其他资产位于 .exe 旁边的文件夹中。实际上将所有文件/文件夹合并为一个 .exe。我不确定这是怎么做到的。

  • zizo 1月前 0 只看Ta
    引用 4

    注意事项: 自从第一次提出这个问题以来,打包和部署已经发生了很大变化。给出的大多数答案甚至不是 JIGSAW (Java 9+) 的最新版本。

    如果目标是创建特定于操作系统的软件包,Oracle Docs Java 17 打包工具用户指南 。本指南包含该 jpackage 工具的文档,可用于为 Linux、macOS 和 Windows 创建特定于平台的软件包。我认为特定于 Windows 的说明应该包括获取 .exe 文件,因为这仍然是 Windows 用户安装和运行应用程序最熟悉的方式。

    我个人创建 exe 文件(在 itch.io 上出售)的经验是使用 Java 平台标准版部署指南 ,其中包括使用工具 Inno Setup 5。 这个文档比较旧,适用于 Java 9。与 .exe 打包直接相关的部分位于 此处 作为第一步,我曾经 jlink 制作了一个独立的包。当我第一次处理这个问题时,我无法弄清楚如何 jpackage 使用我的模块化程序。但现在 Jigsaw 已经存在好几年了, jpackage 现在可能更容易使用,并且将成为我为 Windows 用户发布的下一个 Java 应用程序的首选。

  • GraalVM

    对于我来说,这是一个足够好的软件,我之前就用过它。该软件可以将 Java 项目编译为本机可执行文件,它还可以将 jar 文件转换为本机可执行文件,这比我在网上找到的任何转换器都要好,因为它运行得更快、更流畅。

    GraalVM 是一个具有提前本机映像编译功能的高级 JDK。

    您可以从类文件、JAR 文件或模块构建本机可执行文件。

  • 您可以使用 jar2exe 。但是您需要购买该软件。如果您需要开源软件,我建议您使用 JSmooth .

  • 这就是 Java 的强大之处,现在有了新的“javapackager”工具,您可以将 jar 文件包装成适合所有 Linux、macOS 和 Windows 系统的格式。能够直接使用 .jar 文件确实很好,但对用户来说不太友好。相反,最好将其包装成所有系统可能使用的所有格式,而不是将用户限制为 .exe,并在产品网站或任何其他分发方式上提供它们。

  • 问题是,java 的强大之处在于可移植性,但很多人只需要一个基本的 Windows exe。就我个人而言,我喜欢 java 的概念……但我想分发一些我的用户可以运行的东西,而不必下载 JRE。

  • 我反对将 Java 程序转换为 .exe 应用程序,这是可以理解的,我有自己的理由。主要理由是 Java 程序可以通过许多 IDE 编译为 jar 文件。当程序为 .jar 格式时,它可以在多个平台上运行,而 .exe 只能在非常有限的环境中运行。我赞成 Java 程序不应转换为 Exe,除非非常必要。人们总是可以编写 .bat 文件来运行 Java 程序,尽管它是 jar 文件。

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

  • 引用 10

    我非常怀疑这种方法的有效性。我必须亲眼看到才能相信(想想这个事实:大多数 Java 代码都是对 JRE 的 API 调用,而所有这些都不存在于 C 中,更不用说语言工作方式的差异了)。

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

  • 您可以使用 Janel 。后者可用作应用程序启动器或服务启动器(从 4.x 开始可用)。

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

  • nk0 1月前 0 只看Ta
    引用 14

    我认为 JSmooth 似乎做得非常好。

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

    一起使用 jlink ,构建精简版 Java 运行时映像,该映像与安装程序捆绑在一起,仅包含支持应用程序所需的一组模块。 jlink 如果未指定运行时,jpackage 也会隐式运行该步骤,但我更喜欢单独制作 JRE 映像,因为它只会在您更新 JDK 或向项目添加新的模块依赖项时发生变化。

    Java 类的主要示例:

    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 上构建的示例步骤 - 显然您需要设置本地构建环境(Maven / ant / etc)来重现此操作:

    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
    

    如果缺少上述模块,您应该检查 jlink JRE 运行时映像是否可以运行您的应用程序:

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

    使用 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
    
  • 显然,JWS 的安全性已经加强了很多,因此需要比以前付出更多的努力才能运行。不过,对于安装程序来说,它可能仍然有用。

  • mgcv 1月前 0 只看Ta
    引用 17

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

    然而,自 2018 年起,Java Web Start 不再与最新的 JDK 捆绑在一起。Oracle 正在推动“使用封闭的 JRE 在本地部署应用程序”模型。

  • 我们正在使用 Install4J 为 Windows 或 Unix 环境构建安装程序。

    它很容易定制,您可以编写脚本来执行标准对话无法完成的特殊操作。但即使我们用它来设置 Windows 服务,我们也只使用标准组件。

    • 安装程序 + 启动器
    • Windows 或 Unix
    • 可以用 Java 编写脚本
    • 蚂蚁任务
    • 许多可定制的标准面板和操作
    • 可选地包含或下载 JRE
    • 还可以启动 Windows 服务
    • 多种语言

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

  • 您可以使用以下代码创建批处理文件:

    start javaw -jar JarFile.jar
    

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

  • 引用 20

    GNU Java 开发已基本转移到 OpenJDK,因为非 Oracle 源无法访问 TCK 进行验证。

返回
作者最近主题: