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

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

Remus Rusanu 1月前

78 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)
  • 小程序的简单破解:编写一个带有 main 和对函数 \'system\' 的调用的 C 代码,如 system(\'appletviewer java_src_file\');

  • 只是为了完整起见(我自己没有尝试过,因为我们需要 exe 包装器,而不是安装程序):安装程序包也可以使用 javapackager 创建(请参阅

  • 截至 2021 年,GraalVM 是一种将 Java 编译为本机代码的有趣方式,并得到 Oracle 的官方支持。

  • java打包程序

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

    – Oracle 的文档

    javapackager 实用程序随 JDK 一起提供。它可以使用该 -native exe 标志生成 .exe 文件,以及许多其他功能。

    运行4J

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

    • 使用 INI 文件指定类路径、主类、vm 参数、程序参数。
    • 任务管理器中显示的自定义可执行文件名称。
    • 额外的 JVM 参数可实现更灵活的内存使用。
    • 内置图标替换器,用于自定义图标。
    • [更多要点如下]

    – WinRun4J 的网页

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

    打包机

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

    –packr 自述文件

    packr 是另一个开源工具。

    JSmooth

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

    – JSmooth 网站

    JSmooth 是开源的,功能强大,但历史悠久。上次发布是在 2007 年。

    杰克斯包

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

    – JexePack 的网站

    JexePack 是试用软件。生产使用需要付费,使用此工具创建的 exe 文件将在未付费的情况下显示“提醒”。此外,上次发布是在 2013 年。

    随处安装

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

    – InstallAnywhere 网站

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

    可执行 JAR 文件

    向 JAR 清单添加入口点来 创建双击时自动运行的 JAR 文件 .


    更多信息

    关于这个主题的一个极好的信息来源是这篇文章,《 将 Java 转换为 EXE – 为什么、何时、何时不转换以及如何 》,作者:Dmitry Leskov

    另请参阅配套页面 \' 最佳 JAR 到 EXE 转换工具,免费和商业 "

  • 试试这个:javaexe.free.fr/html/en/JavaExe.html

  • javapackager 是否将 JVM 打包在输出的可执行文件中,或者是否要求在应用程序分发的任何地方安装 Java?

  • Launch4j

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

    – Launch4j 的网站

  • 更新: GCJ 已死。它 正式 从 GCC 项目中移除。甚至在那之前,它实际上已被废弃了七年,而且无论如何它 都不够完善 ,无法作为可行的替代 Java 实现。

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

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

    尽管 GCJ 并不支持 Java 中的所有内容,尤其是 GUI 组件(请参阅常见 问题解答 “支持哪些 Java API?支持程度如何?” 问题 )。我很少使用 GCJ,但从我对控制台应用程序进行的有限测试来看,它似乎不错。

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

    就开源安装程序而言, Nullsoft Scriptable Install System 是一个可编写脚本的安装程序。如果您感兴趣,这里有 用户贡献的示例 ,介绍如何检测 JRE 的存在,并在未安装所需的 JRE 时自动安装它。(只是让您知道,我以前没有使用过 NSIS。)

    有关使用 NSIS 安装 Java 应用程序的更多信息,请查看 对问题“ 分发 Java 应用程序的最佳方式是什么?"

  • 引用 10

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

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

    start javaw -jar JarFile.jar
    

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

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

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

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

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

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

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

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

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

  • 从 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
    
  • nk0 1月前 0 只看Ta
    引用 16

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

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

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

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

  • 引用 20

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

返回
作者最近主题: