我需要知道JDK在我的机器上的位置。

在cmd中运行Java -version时,它显示的版本为'1.6.xx'。 为了找到这个SDK在我的机器上的位置,我尝试使用echo %JAVA_HOME%,但它只显示'JAVA_HOME'(因为在我的环境变量中没有'JAVA_PATH' var设置)。


当前回答

在Windows PowerShell中,您可以使用Get-Command功能查看Java安装在哪里:

Get-Command -All java

Or

gcm -All java

-All部分确保显示它在路径查找中出现的所有位置。下面是示例输出。

PS C:> gcm -All java

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     java.exe                                           8.0.202.8  C:\Program Files (x86)\Common Files\Oracle\Java\jav...
Application     java.exe                                           8.0.131... C:\ProgramData\Oracle\Java\javapath\java.exe

其他回答

在macOS上运行:

cd /tmp && echo 'public class Main {public static void main(String[] args) {System.out.println(System.getProperty("java.home"));}}' > Main.java && javac Main.java && java Main

在我的机器上,这样打印出来:

/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home

注意,运行哪个java不会显示JDK的位置,因为java命令是JavaVM.framework的一部分,它包装了真正的JDK:

$ which java
/usr/bin/java
/private/tmp
$ ls -l /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 14 Nov 17:37 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

简单方法(Windows): 使用java打开一个应用程序。 按CTRL + shift + esc

右键单击OpenJDK平台二进制文件。单击打开文件位置。 然后它会显示java/javaw.exe,然后转到显示文件夹的顶部,单击jdk,然后右复制路径,嘣。(不适用于使用捆绑jre路径/运行时的应用程序,因为它将显示捆绑运行时的路径)

命令行:

在命令提示符中运行where java。

GUI:

在Windows 10上,你可以通过控制面板>程序> Java找到路径。在显示的面板中,您可以找到如下截图所示的路径。在Java控制面板中,转到“Java”选项卡,然后单击“查看和管理Java应用程序和applet的Java运行时版本和设置”描述下的“查看”按钮。

这应该适用于Windows 7和其他最新版本的Windows。

这是特定于操作系统的。在Unix:

which java

将显示可执行文件的路径。我不知道Windows中是否有类似的,但你通常在系统PATH中有JDK安装的bin文件夹:

echo %PATH%

如果需要的话,我通过在64位和32位注册表中测试注册表键来改进上面munsingh的答案:

::- Test for the registry location  
SET VALUE=CurrentVersion
SET KEY_1="HKLM\SOFTWARE\JavaSoft\Java Development Kit"
SET KEY_2=HKLM\SOFTWARE\JavaSoft\JDK
SET REG_1=reg.exe
SET REG_2="C:\Windows\sysnative\reg.exe"
SET REG_3="C:\Windows\syswow64\reg.exe"

SET KEY=%KEY_1%
SET REG=%REG_1%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

SET KEY=%KEY_2%
SET REG=%REG_1%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

::- %REG_2% is for 64-bit installations, using "C:\Windows\sysnative"
SET KEY=%KEY_1%
SET REG=%REG_2%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

SET KEY=%KEY_2%
SET REG=%REG_2%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

::- %REG_3% is for 32-bit installations on a 64-bit system, using "C:\Windows\syswow64"
SET KEY=%KEY_1%
SET REG=%REG_3%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

SET KEY=%KEY_2%
SET REG=%REG_3%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

:_set_value
FOR /F "tokens=2,*" %%a IN ('%REG% QUERY %KEY% /v %VALUE%') DO (
    SET JDK_VERSION=%%b
)
SET KEY=%KEY%\%JDK_VERSION%
SET VALUE=JavaHome
FOR /F "tokens=2,*" %%a IN ('%REG% QUERY %KEY% /v %VALUE%') DO (
    SET JAVAHOME=%%b
)
ECHO "%JAVAHOME%"
::- SETX JAVA_HOME "%JAVAHOME%"

访问64位注册表的参考