Java on OS X: "open" 命令不会 运行 如果 .app 包包含 JVM 包

Java on OS X: "open" command won't run if .app package contains a JVM bundle

我正在尝试从 Java 应用程序创建一个独立的 Mac 应用程序。我已经设置了 .app 目录,配置了 Info.plist 文件,烘焙了依赖项以及 Java 运行 时间。我成功地打开了 .app 并启动​​了程序,除了一段特殊的代码外,一切正常:

ProcessBuilder pb = new ProcessBuilder("open", "/Applications/TextEdit.app");
pb.start();

当我启动 .app 时,此代码似乎运行或至少做任何事情。如果我打开包内容并启动 .jar,它 运行 没问题。我设法将其缩小为仅在 .app 包含 Java 运行time 包时发生。由于 运行ning .jar 使用系统的 Java 并且 运行ning .app 使用捆绑的 Java,这一定是我挣扎的原因。

我Mac安装的JavaJDK版本应该是1.8.0_77。 捆绑版本应该是 1.8.0_74。我从 Moneydance 应用程序中抓取了它,因为我在制作 .app 时将其用作参考。

非常感谢任何帮助,因为这应该是发布它的最后一步。我创建这个问题比我的其他问题 .

更具体

所以我会自己回答这个问题,因为这个问题有点在我这边。

我使用的捆绑 JVM(我从 Moneydance 应用程序复制的)是罪魁祸首。我怀疑 Moneydance 的创建者可能已经剥离了他们的应用程序不使用的运行时功能包以减小文件大小。不管是什么原因,我的问题都通过创建我自己的包解决了。

我通过将 /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk 复制到 MyApp.app/Contents/PlugIns/ 来做到这一点。之后我编辑了名为 JVMRuntimeInfo.plist 键以使用条目 jdk1.8.0_77.jdk。我的应用程序现在使用这个 JDK 而不是我以前拥有的包,并且 open 现在可以正常工作了。

很抱歉没有做我的功课,但感谢提供帮助的人。我在编写复制步骤时发现了这个问题,所以如果没有你我可能找不到它。我想我能对那些可能遇到类似情况的人说的就是检查你的 JVM 包。