我需要知道JDK在我的计算机上的位置。
在命令提示符中运行java -version
,它会显示版本为“1.6.xx”。
为了找到此SDK在我的计算机上的位置,我尝试使用echo %JAVA_HOME%
,但它只显示“JAVA_HOME”(因为在我的环境变量中没有设置“JAVA_PATH”变量)。
我需要知道JDK在我的计算机上的位置。
在命令提示符中运行java -version
,它会显示版本为“1.6.xx”。
为了找到此SDK在我的计算机上的位置,我尝试使用echo %JAVA_HOME%
,但它只显示“JAVA_HOME”(因为在我的环境变量中没有设置“JAVA_PATH”变量)。
Get-Command
函数来查看 Java 安装在哪个位置:Get-Command -All java
或者
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
PowerShell一行命令:
$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
。 - Diomidis Spinellis从命令行运行该程序:
// File: Main.java
public class Main {
public static void main(String[] args) {
System.out.println(System.getProperty("java.home"));
}
}
$ javac Main.java
$ java Main
关于Windows系统... 变量java.home并不总是与运行的二进制文件相同位置。
正如Denis The Menace所说,安装程序会将Java文件放在Program Files中,但也将java.exe放在System32中。如果路径中没有任何与Java相关的内容,则java -version仍然可以工作。但是当运行PeterMmm的程序时,它将Program Files的值报告为java.home,这并没有错(Java确实安装在那里),但实际运行的二进制文件位于System32中。
查找java.exe二进制文件位置的一种方法是,在PeterMmm的代码中添加以下行以使程序运行更长时间:
try{Thread.sleep(60000);}catch(Exception e) {}
编译并运行它,然后查找java.exe图像的位置。例如,在Windows 7中打开任务管理器,找到java.exe条目,右键单击并选择“打开文件位置”,这将打开Java二进制文件的精确位置。在这种情况下,它将位于System32。
您尝试过查看您的 %PATH% 变量吗?这是 Windows 用来查找任何可执行文件的。
Echo %PATH%.
我的似乎在 Windows 7 上的 c:\Program Files\Java
中。 - Mark Irvin只需在命令行中执行set
命令,然后您就可以查看所有已设置的环境变量。
如果在Unix上,您可以简化操作:
$ set | grep "JAVA_HOME"
在 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
which 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
which java
将显示可执行文件的路径。我不知道Windows上是否有相应的功能,但通常在系统PATH
中有JDK安装的bin
文件夹:
echo %PATH%
如果你正在寻找包括子目录(如:bin,docs,include,jre,lib,etc.)的主目录,那么对于Linux来说,这些答案都是不正确的。
对于Ubuntu上的openjdk1.8.0,它位于:
/usr/lib/jvm/java-1.8.0-openjdk-amd64
你可能更喜欢使用它作为JAVA_HOME
,因为如果你编译JNI源文件,你将能够找到头文件。虽然which java
会提供二进制路径,但它不是真正的JDK home。
我通过测试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%"