【问题标题】:How get a Mac JRE (on linux) that is ready for embedding?如何获得准备好嵌入的 Mac JRE(在 linux 上)?
【发布时间】:2021-05-19 05:10:30
【问题描述】:

多年来,我分发了一个依赖 javafx 的软件,解决方案是在分发的软件中包含一个 JRE,并使用设置 JAVA_HOME 的脚本运行我的 .jar 文件。效果很好。

Mac 版本一直是一个挑战:我必须从 java 下载 .dmg,解压缩它,并针对(历史上)不同的目录结构调整脚本(这可能是 .dmg 打包的产物,我不知道)。但它总是有效的。 (我在 Linux 上这样做。)

我最近将包含的 JRE 更新到了最新版本 (1.8.0_291),它不再适用于 Mac,即使在我更正了新的目录结构之后也是如此。用户报告脚本错误:

Error: could not find libjava.dylib
Error: Could not find Java SE Runtime Environment.

...确实,没有 libjava.dylib。在我使用的以前的 Mac JRE 版本 (1.8.0_92) 中,此文件位于:

lib/jre/Contents/Home/lib/libjava.dylib

...但它在最新的任何地方都不存在。我还注意到最新的 JRE 总计 107 MB,而旧的为 164 MB,因此对于这些最近的 JRE 下载,我似乎有些不理解。例如。也许mac版本需要安装程序才能完成?

在哪里可以下载可分发的 Mac JRE?

如果做不到这一点,制作包含 Mac JRE 的正确方法是什么?

【问题讨论】:

  • 我不知道它是否包含 JavaFX,但 AdoptOpenJDK 维护着您可以分发的 Mac 版本。 adoptopenjdk.net
  • 请注意,Oracle 通常不鼓励嵌入(完整)JRE。推荐的方法是使用 jlink 为您的应用程序创建自定义 JRE,或者依赖 OS 平台的包安装程序提供的完整 JDK/JRE。 Jlink 是一个 Java 9+ 工具。
  • 话虽如此,这个问题可能与 bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8213362bugs.openjdk.java.net/browse/JDK-8238225 或 AdoptJDK 11 中的相关错误有关。
  • 提醒一下。现在是 2021 年,Java 的最新版本是 16,而不是 1.8。现在你使用像 jpackage 这样的工具来打包你的应用程序。 docs.oracle.com/en/java/javase/16/jpackage/…
  • @Thilo 感谢您的提示,它很有帮助。感谢其他所有人——我显然落后了 10 年 :-)。至少我能够让事情重新开始。以后我要学习modules和jlink/jpackage/etc。

标签: java javafx


【解决方案1】:

似乎AdoptOpenJDK 是用于多平台预构建 JRE 的一个很好的通用方法,但它们 do not include JavaFX

我尝试将 OpenJDK 与来自 OpenJFX from openjfx.io 的库结合使用,虽然我的应用程序表面上可以工作,但有很多异常表明两者之间的兼容性很差。 (我无法为 JDK 11 精确匹配版本。两者的最新版本(JDK 16)可能会更好地互操作。)

我找到了Liberica JDK from BellSoft。他们的“完整 JRE”包括 javafx 并且正在工作。我确实在启动时遇到了一个与摇摆相关的异常,但这似乎与功能无关。

貌似也有Azul platform,不过我没调查过。

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多