我有一个 Java 应用程序,它在安装了多个 JVM 的开发人员机器上运行。该应用程序调用子 Java 应用程序,并且(取决于子应用程序)需要从所有可用的 JVM 中选择一个合适的 JVM。
子应用程序的 JVM 不一定是父应用程序使用的 JVM。例如,用户可能已经使用 OpenJDK 1.7.0 启动了父应用程序,但希望将遗留工具作为子进程启动,并且该工具需要 Sun API,因此必须是 Sun JDK。
是否有一个库可以在我的本地机器上查找 JVM 并提供一些 API 来查询它们的信息,这样当我运行我的子进程时,我可以选择一个合理的 JVM?
我希望能够做的是:
public Jvm chooseAvailableJvmForDevTool() {
for (Jvm jvm : SomeLibrary.pollJvms()) {
if (jvm.getVersion().getMinor() == 6 && jvm.isHotspot() && jvm.isJDK()) {
return jvm;
}
}
throw new UnsupportedOperationException("This tool requires a Sun Hotspot 1.6 JDK");
}
我不期望这样的库会找到所有的 JVM,但如果它可以尝试在明显的地方找到其中的一些,那就太好了。例如,在 Windows 机器上,我希望它至少会在 C:\Program Files\Java 中查找,而在 Linux 机器上,它会在 /usr/lib/jvm 中查找。如果我能给这个库一些可能的地方,我公司的开发人员喜欢安装他们的 JDK,那就更好了。(例如,一些 Windows 开发人员防御性地在“C:\
这个问题几乎是这个两年前的问题的重复...... 如何使用Java以编程方式安装所有Java JVM(不是默认的)?
...但我(重新)询问,希望在过渡的两年内,有人可能已经创建了一个开源库来做到这一点,这样我们都可以从改进中受益。有人知道这样的项目吗?(或者可以提供一个令人信服的论点,为什么这样的图书馆会是一个非常糟糕的主意?)