我可以获取当前 运行 java 可执行文件的路径吗?

Can I get the path of the currently running java executable?

假设我想从命令行 运行 一个 java 程序并且我使用这个命令:

myExes\java\java.exe AJavaProgram

如您所见,java.exe 不在我的路径中,所以我 运行 手动设置它而不是简单地使用命令 java AJavaProgram.

我希望程序 return/print 命令中的第一个条目,在本例中,该条目是 myExes\java。 (在末尾加上 java.exe 也可以)。

有办法吗?

起初,我认为这很简单。 args[0] 会 return 路径,但事实并非如此。

这样怎么样?
您可以获得 java 主目录。

String path = System.getProperty("java.home");

您无法获取字符串 "myExes\java\java.exe",但您可以获取 Java 安装的位置。

以下是 运行 OpenJDK 14 在 Windows 10 上的结果:

System.out.println(System.getProperty("java.home"));
System.out.println(System.getProperty("sun.boot.library.path"));

输出

C:\prog\Java64\jdk-14
C:\prog\Java64\jdk-14\bin

作为参考,java.exe的完整路径是:

C:\prog\Java64\jdk-14\bin\java.exe

当您执行 myExes\java\java.exe AJavaProgram 时,AJavaProgramjava.exe 的参数,而不是相反。当你做 java AJavaProgram 时也是一样的,AJavaProgramjava 的参数。

ProcessHandle.current() returns 当前 Java 进程。您可以使用它来查看进程句柄信息中的完整命令:

ProcessHandle.current().info().command().ifPresent(
    cmd -> System.out.println(cmd));