Как мне найти, где JDK установлен на моем компьютере с Windows? - PullRequest
274 голосов
/ 13 января 2011

Мне нужно знать, где находится JDK на моей машине.

При запуске Java -version в cmd версия отображается как «1.6.xx». Чтобы найти местоположение этого SDK на моей машине, я попытался использовать echo %JAVA_HOME%, но он показывает только «JAVA_HOME» (так как в моих переменных окружения нет переменной «JAVA_PATH»).

Ответы [ 22 ]

9 голосов
/ 13 января 2011

Запустите эту программу из командной строки:

// File: Main.java
public class Main {

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

}


$ javac Main.java
$ java Main
9 голосов
/ 24 ноября 2015

В Windows вы можете использовать

C:>dir /b /s java.exe

, чтобы напечатать полный путь каждого "java.exe" на вашем диске C: независимо от того, находятся ли они в переменной среды PATH.

8 голосов
/ 17 июня 2017

Powershell один вкладыш:

$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
5 голосов
/ 13 января 2011

Вы пытались посмотреть на переменную% PATH%. Это то, что Windows использует для поиска любого исполняемого файла.

5 голосов
/ 13 января 2011

Просто выполните команду set в командной строке.Затем вы увидите все переменные окружения, которые вы установили.

Или, если в Unix вы можете упростить это:

$ set | grep "JAVA_HOME" 
3 голосов
/ 13 января 2011

Это зависит от ОС. В Unix:

which java

отобразит путь к исполняемому файлу. Я не знаю эквивалента Windows, но там у вас обычно есть папка bin установки JDK в системе PATH:

echo %PATH%
2 голосов
/ 27 января 2016

Ни один из этих ответов не подходит для Linux, если вы ищете дом, который включает подкаталоги, такие как: bin, docs, include, jre, lib и т. Д.

В Ubuntu для openjdk1.8.0 это находится в: /usr/lib/jvm/java-1.8.0-openjdk-amd64

, и вы можете предпочесть использовать это для JAVA_HOME, так как вы сможете найти заголовки, если будете создавать исходные файлы JNI. Это правда, что which java предоставит двоичный путь, но это не настоящий дом JDK.

1 голос
/ 18 января 2018

В 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
0 голосов
/ 27 марта 2019

Скрипт для 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
0 голосов
/ 28 марта 2018

Я улучшил ответ munsingh выше, протестировав ключ реестра в 64-битных и 32-битных реестрах, если необходимо:

::- 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-битному реестру

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...