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

时间:2011-01-13 14:26:14

标签: java windows

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

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

24 个答案:

答案 0 :(得分:284)

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

试试这个:

$ which java

应该输出确切的位置。

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

在我的电脑(Mac OS X - Snow Leopard)中:

$ 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

答案 1 :(得分:101)

Windows>开始> cmd>

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

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

答案 2 :(得分:81)

在Windows中的命令提示符

where javac

答案 3 :(得分:26)

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

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

这就是java本身发现安装了不同版本的方式。这就是为什么32位和64位版本可以共存并且工作正常而不会干扰的原因。

答案 4 :(得分:26)

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

答案 5 :(得分:21)

在Windows平台上简单明了:

其中java

答案 6 :(得分:15)

下面的批处理脚本将打印出现有的默认JRE。通过将 Java Runtime Environment 替换为 Java Development Kit ,可以轻松修改它以找到安装的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

答案 7 :(得分:11)

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

这应该适用于Windows 7以及可能的其他最新版本的Windows。

enter image description here

答案 8 :(得分:11)

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

set java_home

或者,如果您不喜欢命令环境,可以从以下位置查看:

开始菜单>计算机>系统属性>高级系统属性。然后打开“高级”标签>环境变量和系统变量尝试查找JAVA_HOME。

enter image description here

答案 9 :(得分:10)

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

正如Denis The Menace所说,安装程序将Java文件放入 Program Files ,而 java.exe 放入 System32 。在路径 java -version 上没有任何与Java相关的东西仍然可以工作。然而,当运行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

答案 10 :(得分:9)

在Windows下,您可以使用

C:>dir /b /s java.exe

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

答案 11 :(得分:9)

从命令行运行此程序:

// File: Main.java
public class Main {

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

}


$ javac Main.java
$ java Main

答案 12 :(得分:7)

Powershell one liner:

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

答案 13 :(得分:5)

只需在命令行中执行set命令即可​​。然后,您将看到已设置的所有环境变量。

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

$ set | grep "JAVA_HOME" 

答案 14 :(得分:5)

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

答案 15 :(得分:3)

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

which java

将显示可执行文件的路径。我不知道Windows等价物,但您通常在系统bin中安装了JDK安装的PATH文件夹:

echo %PATH%

答案 16 :(得分:2)

在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

答案 17 :(得分:2)

如果您正在寻找包含子目录的主页,例如:bin,docs,include,jre,lib等,这些答案都不适用于Linux。

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

并且您可能更喜欢将其用于JAVA_HOME,因为如果您构建JNI源文件,您将能够找到标头。虽然它是真的which java将提供二进制路径,但它不是真正的JDK家。

答案 18 :(得分:1)

在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

答案 19 :(得分:0)

Windows cmd中的

set "JAVA_HOME" 

答案 20 :(得分:0)

如果需要,我通过在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%"

reference for access to the 64-bit registry

答案 21 :(得分:0)

用于32/64位Windows的脚本。

if name == main

答案 22 :(得分:0)

也许上述方法有效...我尝试了一些,但并非对我有用。这是什么:

在终端中运行它:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
i = Options.DefaultHighlightColorIndex
Options.DefaultHighlightColorIndex = wdYellow
With ActiveDocument.Range
  With .Find
    .Forward = True
    .Format = False
    .MatchCase = False
    .Wrap = wdFindContinue
    .MatchWildcards = True
    .ClearFormatting
    .Replacement.ClearFormatting
    .Replacement.Highlight = True
    .Text = "í.[^s ]@[0-9,.]{1,}>"
    .Replacement.Text = "^&"
    .Execute Replace:=wdReplaceAll
  End With
End With
Options.DefaultHighlightColorIndex = i
Application.ScreenUpdating = True
End Sub

答案 23 :(得分:0)

#!/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中找到java可执行文件:http://srcode.org/2014/05/07/detect-java-executable/