【发布时间】: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-8213362 或 bugs.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。