繁体   English   中英

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

[英]How do I find where JDK is installed on my windows machine?

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

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

如果您使用的是 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

Windows > 开始 > cmd >

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

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

在 Windows 中的命令提示符处

where javac

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

命令行

在命令提示符下运行where java

在此处输入图像描述

图形用户界面:

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

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

在此处输入图像描述

在 Windows 平台上简单明了:

java在哪里

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

您可以查找注册表中安装的所有 Java 版本。 看看 HKLM\SOFTWARE\JavaSoft\Java Runtime Environment 和 HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment 用于 64 位 Windows 上的 32 位 java。

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

在 Windows 下,您可以使用

C:>dir /b /s java.exe

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

下面的批处理脚本将打印出现有的默认 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

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

set java_home

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

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

在此处输入图像描述

Powershell 一班:

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

有关 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

从命令行运行这个程序:

// 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 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

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

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

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

$ set | grep "JAVA_HOME" 

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

which java

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

echo %PATH%

在 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命令是包装真实 JDK 的JavaVM.framework的一部分:

$ 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

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

在用于 openjdk1.8.0 的 Ubuntu 上,它位于: /usr/lib/jvm/java-1.8.0-openjdk-amd64

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

也许上述方法有效......我尝试了一些但没有为我服务。 做了什么:

在终端中运行它:

/usr/libexec/java_home
#!/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

对于窗户:

@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/

在 Windows cmd 中:

set "JAVA_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%"

访问 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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM