在 Mac 上使用 Oracle Java 进程内虚拟机

Using Oracle Java VM in-process on Mac

这是 的跟进。

MacOS X 在 /usr/bin 下有 java 命令。如果从 Oracle 安装 JRE,它不起作用 - 声称没有 Java 运行time,并提供下载和安装 Apple 的 运行time。但是如果你先 运行

export JAVA_HOME=/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

然后 java 按预期工作。这就是 Oracle JRE 安装自身的地方。


现在我想在进程中使用 Oracle Java VM,但我不能 - "You need Java runtime" 错误消息不断弹出,即使 JAVA_HOME设置。

针对 JavaVM 框架的链接会导致应用程序启动时出现消息,甚至在 main() 之前。

尝试动态加载 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/server/libjvm.dylib 并调用 JNI_CreateJavaVM 在方法调用期间会导致相同的消息。

编辑:毕竟 java 命令以某种方式完成了它。我用调试器四处寻找,它确实在某些时候调用 JNI_CreateJavaVM 。我什至模仿了参数(还有一个额外的参数,-Dsun.java.launcher=SUN_STANDARD),它没有任何区别。

找到答案here

需要加载 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib,而不是加载 libjvm.dylib。它也导出 JNI_CreateJavaVM。调用那个,它会按预期工作。

即使 JAVA_HOME 未设置也能正常工作。

未来警告:Oracle 表示自 Java1.9 起,将不再支持浏览器插件技术。考虑到这一点,1.9 版中的 Oracle JRE 主页可能不再位于 Internet Plug-Ins 之下。