macOS:在应用程序中嵌入 OpenJDK 11 仍然会引发 java 6 警报

macOS: Embedding OpenJDK 11 in application still raises java 6 alert

我们有一个跨平台应用程序,它由 java swing UI 和大量本机代码组成。 Java 和本机代码使用 JNI 相互通信。我们针对 java 11 编译和 link。这在 windows 和 linux.

上运行良好

在 mac 上,我们目前使用的是旧 Apple Java 6。我们希望摆脱这种依赖,并在所有平台上迁移到 openJDK 11。一切似乎 运行 都很好。我们看到我们的应用程序正在启动我们的嵌入式 java 11 版本并且一些 java 代码已经被执行但是在很短的时间后 Apple "please install Java SE 6" 警报弹出。

如何预防?安装 Apple java 后,应用程序可以使用 java 11 而不是 java 6。

macOS 在这里检查什么 - 为什么它认为 java 6 仍然需要?

我们找到我们嵌入了本地代码的 java 11 版本并动态加载 jvm dylib,最后调用 JNI_CreateJVM() 来实例化一个 jvm,然后我们跳入一些 java 代码开始执行,但一段时间后,可怕的 "Please install Java SE 6 alert" 弹出。

我正在测试 macOS Sierra/High Sierra 和 Mojave。

感谢您的帮助!

出于某种原因,您需要加载 libjli.dylib 而不是 libjvm.dylib 以避免在 macOS 上出现 Java 6 警报。