如何在运行时获取当前正在运行的JVM的可执行文件的位置?我想使用ProcessBuilder类将另一个JVM实例化为子进程。
我知道有java.home
系统属性,但这没有指定JVM可执行文件的位置。我知道我可以做这样的事情来获取路径:
System.getProperties().getProperty("java.home") + File.pathSeparator + "bin" + File.pathSeparator + "java"
此代码不是平台无关的,因为Windows可执行文件的名称是java.exe
,而不是java
。是否有一种方法可以获取考虑平台特质的JVM可执行文件的路径?
您总是可以使用os.name来检查用户是否正在运行Windows。可以在OS X,Linux和Windows上通过[]
String jvm_location;
if (System.getProperty("os.name").startsWith("Win")) {
jvm_location = System.getProperties().getProperty("java.home") + File.separator + "bin" + File.separator + "java.exe";
} else {
jvm_location = System.getProperties().getProperty("java.home") + File.separator + "bin" + File.separator + "java";
}
[该主题对涉及多个平台的问题进行了有趣的讨论:Finding current executable's path without /proc/self/exe
是的,有一种方法可以获取JVM可执行文件的路径(如果存在)。将其包括在应用程序的配置中。有很多方法可以做到:命令行参数-java myApp.Main / path / to / Java;属性-java -Dpath.to.java = / path / to / java;等
以下代码通过使用当前java
的ProcessHandle.Info
获得到当前ProcessHandle.Info
可执行文件的路径。
您正在尝试派生整个JVM。