我有一个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开发人员在防御性地安装Java以外的地方除了" C:\ Program Files \ Java"以防万一他们使用的工具没有正确地逃避"程序中的空间文件"。)
这个问题几乎与这个两年前的问题重复...... How to programatically get all Java JVM installed (Not default one) using Java?
...但是我(再)提出希望,在过渡的两年里,有人可能已经掀起了一个开源库,这样我们都可以从改进中受益。有人知道这样的项目吗? (或者可以提供一个令人信服的论据,为什么这样的图书馆会是一个非常糟糕的想法?)