我如何找到JDK安装在我的windows机器上的位置?

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

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

1217537 次浏览

如果你使用的是Linux/Unix/Mac OS X:

试试这个:

$ which java

应该输出准确的位置。

之后,你可以自己设置JAVA_HOME环境变量。

在我的电脑(Mac OS X -雪豹):

$ which java
/usr/bin/java
$ ls -l /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 Nov  7 07:59 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

如果你使用的是Windows:

c:\> for %i in (java.exe) do @echo.   %~$PATH:i

您是否尝试查看您的%PATH%变量。这就是Windows用来查找任何可执行文件的方法。

从命令行运行这个程序:

// File: Main.java
public class Main {


public static void main(String[] args) {
System.out.println(System.getProperty("java.home"));
}


}




$ javac Main.java
$ java Main

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

which java

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

echo %PATH%

只需在命令行中执行set命令。然后你会看到你所设置的所有环境变量。

如果在Unix上,你可以简化它:

$ set | grep "JAVA_HOME"

Java安装程序将几个文件放入%WinDir%\System32文件夹(Java .exe, javaws.exe和其他一些文件)。当您在命令行中键入java.exe或创建没有完整路径的进程时,如果% path %文件夹中缺少这些文件,Windows会将它们作为最后的手段运行。

您可以查找注册表中安装的所有Java版本。看看HKLM\SOFTWARE\JavaSoft\Java运行时环境和HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java运行时环境在64位Windows上的32位Java。

这就是java本身如何发现安装的不同版本。这就是为什么32位和64位版本可以共存,并且工作良好而没有干扰。

Windows >开始> cmd > . cmd

C:> for %i in (javac.exe) do @echo.   %~$PATH:i

如果安装了JDK,则显示Path,
例如:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe

更多关于Windows…变量java.home并不总是与运行的二进制文件位于相同的位置。

正如Denis The Menace所说,安装程序将Java文件放入程序文件中,也将java.exe放入System32系统中。在路径上没有任何与Java相关的东西时,java - version仍然可以工作。然而,当PeterMmm的程序运行时,它报告程序文件的值为java.home,这没有错(Java安装在那里),但实际运行的二进制文件位于System32系统中。

查找java.exe二进制文件位置的一种方法是,在PeterMmm的代码中添加以下行,以使程序运行更长时间:

try{Thread.sleep(60000);}catch(Exception e) {}

编译并运行它,然后查找java.exe映像的位置。例如,在Windows 7中打开任务管理器,找到java.exe条目,右键单击并选择“打开文件位置”,这将打开Java二进制文件的确切位置。在这种情况下,它将是System32系统

在Windows的命令提示符

where javac

在windows中,默认值是:C:\Program Files\Java\jdk1.6.0_14(其中数字可能不同,因为它们是版本)。

在Windows平台上简单明了:

在java

在Windows命令提示符中,只需输入:

set java_home

或者,如果你不喜欢命令环境,你可以检查它:

开始菜单>计算机>系统属性>高级系统属性。然后打开高级选项卡>环境变量,在系统变量中尝试找到JAVA_HOME。

enter image description here

#!/bin/bash


if [[ $(which ${JAVA_HOME}/bin/java) ]]; then
exe="${JAVA_HOME}/bin/java"
elif [[ $(which java) ]]; then
exe="java"
else
echo "Java environment is not detected."
exit 1
fi


${exe} -version

windows:

@echo off
if "%JAVA_HOME%" == "" goto nojavahome


echo Using JAVA_HOME            :   %JAVA_HOME%


"%JAVA_HOME%/bin/java.exe" -version
goto exit


:nojavahome
echo The JAVA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program.
goto exit


:exit

这个链接可能有助于解释如何从bash: http://srcode.org/2014/05/07/detect-java-executable/中查找java可执行文件

下面的批处理脚本将打印出现有的默认JRE。通过将Java运行时环境替换为Java开发工具包,可以很容易地修改它以找到安装的JDK版本。

@echo off


setlocal


::- Get the Java Version
set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
set VALUE=CurrentVersion
reg query %KEY% /v %VALUE% 2>nul || (
echo JRE not installed
exit /b 1
)
set JRE_VERSION=
for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
set JRE_VERSION=%%b
)


echo JRE VERSION: %JRE_VERSION%


::- Get the JavaHome
set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
set VALUE=JavaHome
reg query %KEY% /v %VALUE% 2>nul || (
echo JavaHome not installed
exit /b 1
)


set JAVAHOME=
for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
set JAVAHOME=%%b
)


echo JavaHome: %JAVAHOME%


endlocal

在Windows cmd中:

set "JAVA_HOME"

在Windows下,您可以使用

C:>dir /b /s java.exe

打印C:驱动器上每个“java.exe”的完整路径,而不管它们是否在path环境变量中。

如果您正在寻找包含子dirs(如:bin、docs、include、jre、lib等)的home,那么这些答案对于Linux都不正确。

在Ubuntu for openjdk1.8.0上,这是在: /usr/lib/jvm/java-1.8.0-openjdk-amd64 < / p >

你可能更喜欢将它用于JAVA_HOME,因为如果你构建JNI源文件,你将能够找到头文件。虽然which java确实会提供二进制路径,但它不是真正的JDK主页。

Powershell一内衬:

$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome

命令行:

在命令提示符中执行where java

enter image description here

GUI:

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

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

enter image description here

在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

如果需要的话,我通过测试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位注册表

脚本适用于32/64位Windows。

@echo off


setlocal enabledelayedexpansion


::- Get the Java Version
set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
set KEY64="HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment"
set VALUE=CurrentVersion
reg query %KEY% /v %VALUE% 2>nul || (
set KEY=!KEY64!
reg query !KEY! /v %VALUE% 2>nul || (
echo JRE not installed
exit /b 1
)
)


set JRE_VERSION=
for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
set JRE_VERSION=%%b
)


echo JRE VERSION: %JRE_VERSION%


::- Get the JavaHome
set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
set KEY64="HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
set VALUE=JavaHome
reg query %KEY% /v %VALUE% 2>nul || (
set KEY=!KEY64!
reg query !KEY! /v %VALUE% 2>nul || (
echo JavaHome not installed
exit /b 1
)
)


set JAVAHOME=
for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
set JAVAHOME=%%b
)


echo JavaHome: %JAVAHOME%


endlocal

也许上面的方法有用…我试了一些,但不是为了我自己。事情是这样的:

在终端中运行:

/usr/libexec/java_home

在Windows PowerShell中,你可以使用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
简单方法(Windows): 使用java打开一个应用程序。 按CTRL + shift + esc

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