如何制作 Java Mac 不需要安装的应用程序 Java

How to make Java Mac App that doesn't require installing Java

我想使用我编写的 Java 代码制作一个 Mac 应用程序,并且我想让使用它的人不需要安装 Java他们自己的电脑。

有没有办法创建一个 Mac 应用程序,以便它可以 运行 在任何 mac 上,无论他们是否安装了 Java?

您不需要 JDK 在客户端上安装 machine 但我们知道 java 将程序转换为字节码并且需要 java 编译器要将该字节码编译成 machine 语言,您必须在客户端计算机上安装 JRE,无论它是 mac 或 windows 还是任何其他操作系统

捆绑 JVM 或编译本机

您可以选择三种方式将本地 Java-based 应用交付给 Mac 用户。

  • 用户在他们的机器上安装了 JDK or JRE。 (或者 I.T。系统管理员这样做。)
  • 应用程序与特定 OS 和特定芯片架构的 JVM 捆绑在一起。
  • 应用程序被编译为特定 OS 和特定芯片架构的本机代码。

安装JDK/JRE

在公司或学校等受控环境中,在每个 Mac 上安装 JDK 或 JRE 可能是可行的。如果您正在编写 JavaFX 应用程序,则可以安装 OpenJFX 库附带的 JDK/JRE 版本。

您的 Java 应用随后可以使用 already-installed JVM 执行。

顺便说一句,在这样一个受控的环境中,OpenWebStart 是一种利用网络浏览器的便利性来交付和启动本地 Java 应用程序的方法。

相比之下,Oracle 已经放弃了期望普通消费者机器配备 Java pre-installed 的方法。有关详细信息,请参阅 Oracle 白皮书 Java Client Roadmap Update。所以期望个人安装 Java 是不切实际的。

捆绑包JDK/JRE

您可以构建您的应用程序以包含针对特定类型机器的 JDK/JRE,这意味着特定操作系统和特定芯片架构。

对于 Macs,这意味着您需要在之前的芯片转换中为 Macs 使用 Intel (x86) chips, and another build for Macs with Apple Silicon (ARM, AArch64) chips. You would need to to either supply two separate versions of your app, one for each child, or perhaps a “fat binary” that includes two JDKs/JREs for both chips. The fat binary approach was supported by Apple (and its originator, NeXT Inc.) 进行构建,但我尚未验证现在是否属于这种情况在 Intel 到 Apple Silicon 的过渡中。

现代工具有助于嵌入 JDK/JRE。请参阅 jlink and jpackage. See Packaging Tool User's Guide. As of Java 9, the Java Platform Module System 启用仅包含您的特定应用实际使用的 JDK/JRE 的部分。省略了未使用的部分,形成 smaller-sized 最终的应用工件。

编译原生

最后一种方法在运行时使用 GraalVM technology to compile your code to native code specific to the targeted runtime machine. Instead of compiling to bytecode for a conventional JVM to interpret and optionally JIT-compile,在构建应用程序时会执行对本机机器语言的完整编译。这种做法是cutting-edge,或许bleeding-edge。因此,如果您敢于考虑这种新颖的方法,请仔细研究并彻底测试。

对于最后两种方法,您可以选择通过 Apple App Store 分发。