在运行时确定 JVM 可执行文件的位置

2022-09-01 23:38:59

如何在运行时获取当前正在运行的 JVM 的可执行文件的位置?我想使用 ProcessBuilder 类将另一个 JVM 实例化为子进程。

我知道有System属性,但这没有指定JVM可执行文件的位置。我知道我可以做这样的事情来获得路径:java.home

System.getProperties().getProperty("java.home") + File.pathSeparator + "bin" + File.pathSeparator + "java"

此代码不与平台无关,因为 Windows 可执行文件的名称是 ,而不是 。有没有办法获得JVM可执行文件的路径,同时考虑到平台的特性?java.exejava


答案 1

您始终可以使用 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";
}

答案 2

下面的代码通过使用当前 ProcessHandle 的 ProcessHandle.Info 获取当前可执行文件的路径。java

结果被包装在中,因为对命令信息的访问可能受到操作系统权限的限制。Optional

String javaExecutablePath = ProcessHandle.current()
    .info()
    .command()
    .orElseThrow();