Как мне найти, где JDK установлен на моем компьютере с Windows?

303

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

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

Ashine
источник
1
к сожалению, я думаю, что некоторые из ответов ниже могут не работать, потому что, очевидно, что-то изменилось с более поздними версиями Java. Сегодня я скачал версию 7.60 Java SDK. После некоторого поиска нашел его в C: \ Program Files (x86) \ Java \ jdk1.7.0_60. Была установлена ​​более старая версия 6 JRE. Это было в C: \ Program Files \ Java, и это было на% PATH%, а не на новой установке.
likejudo
1
Самый лучший ответ в нижней части - однострочник от majkinetor для PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .CurrentVersion; (gp $ p / $ v) .JavaHome
JohnP2
Еще одна вещь, если ваш JDK был связан с IntelliJ идея, это может быть где-то рядом с установкой идеи. Для меня это было в папке 1 в каталоге вверх из папки с идеями, а переменная PATH указывала на jre в Program Files
KGS

Ответы:

329

Если вы используете 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
Пабло Санта Круз
источник
На самом деле, форма% VAR_NAME% - это Windows
sblundy
1
Обновлен ответ с примерами Linux / Unix / Mac OS X и Windows.
Пабло Санта Круз
125
where javaработает в Windows (по крайней мере, в Windows 7), но если вы действительно хотите JDK, а не JRE, вам нужно поискать в возвращаемых каталогах 'bin / javac /
Jon Strayer
где java не дает полный путь, если java.exe находится на пути, тогда как решение для Пабло для ... предпочтительнее.
Ричард Джонсон
1
ls -l $(which java) | awk '{print $11}'
Однослойная версия
111

Windows> Пуск> cmd>

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

Если у вас установлен JDK, отображается путь,
например:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe

Grokster
источник
16
Windows (7+) => где javac.exe
hB0
6
В окнах это, где ява
Пабитра Дэш
10
where javaработает только если исполняемый файл находится в PATH. Если по какой-либо причине javac отсутствует в пути, он не вернет никакого результата, но это не означает, что JDK не установлен. Таким образом, в общем случае решение для поиска файлов, предложенное @grokster, будет гарантировать результат (на это может потребоваться время).
Никита Григорьевич
Материал 'for-loop' не работал, однако я нашел его здесь: C: \ Program Files (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar
Обратите внимание, что если вы следуете этому ( codelabs.developers.google.com/codelabs/… ) руководству по использованию Android Studio, фактический путь не будет тем, что возвращается командой, приведенной выше. Скорее всего, у вас будет что-то вроде «C: \\ Program Files \ Java | <jdk>», где вместо «jdk» у вас будет что-то вроде «jdk-10.0.1» для JDK версии 10.
Euler_Salter
96

В Windows в командной строке

where javac

NanoBennett
источник
8
В окнах это, где ява
Пабитра Дэш
7
Обратите внимание, это работает, только если javac находится в PATH. Если это не так, эта команда скажет, что она не найдена, но JDK все еще можно установить. Используйте другие методы, если ваш PATH не был обновлен после установки JDK.
Никита Григорьевич
1
какие еще методы? Вы упомянули использование для% i в (javac.exe) do @echo. % ~ $ PATH: я , но, как вы написали, он не будет работать, если вы не установили его в PATH.
Нимрод
30

В окнах по умолчанию: C:\Program Files\Java\jdk1.6.0_14(где цифры могут отличаться, так как они версии).

Ронен Рабиновичи
источник
Как бы вы получили другой номер версии?
ЛЖ
просто переходите к местоположению постепенно из вашего проводника, и вы увидите версию папки jdk, которую вы установили.
Анбизкад
26

Установщик Java помещает несколько файлов в папку% WinDir% \ System32 (java.exe, javaws.exe и некоторые другие). Когда вы набираете java.exe в командной строке или создаете процесс без полного пути, Windows запускает их как последнее средство, если они отсутствуют в папках% PATH%.

Вы можете посмотреть все версии Java, установленные в реестре. Посмотрите на HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Environment и HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment для 32-битной Java на 64-битной Windows.

Вот как сама java обнаруживает разные версии установленных. И именно поэтому 32-разрядная и 64-разрядная версии могут сосуществовать и прекрасно работать, не мешая.

Денис Угроза
источник
23

Просто и понятно на платформах Windows:

где ява

luccaa
источник
8
Это приводит к неправильному расположению Java C: \ WINDOWS \ System32 \ java.exe. Но фактический jdk установлен в C: \ Java \ jdk1.7.0 \ (так как установлен JAVA_HOME)
Химаншу Бхардвай
17

Пакетный скрипт ниже распечатает существующую JRE по умолчанию. Он может быть легко изменен , чтобы найти версию JDK установлен путем замены Java Runtime Environment с комплектом Java Development Kit .

@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
munsingh
источник
16

В Windows 10 вы можете узнать путь, перейдя в Панель управления> Java. В появившейся панели вы можете найти путь, как показано на скриншоте ниже. В панели управления Java перейдите на вкладку «Java», а затем нажмите кнопку «Вид» под описанием «Просмотр версий и параметров Java Runtime и настроек для приложений и апплетов Java».

Это должно работать на Windows 7 и, возможно, других последних версиях Windows.

введите описание изображения здесь

smartexpert
источник
Я нахожусь на Windows 10, и нет никакой Java в панели управления
Lang React Dev
1
Вы уверены, что Java установлена ​​и была установлена ​​с помощью установочного пакета Windows?
smartexpert
Вы можете попытаться просмотреть переменные своей учетной записи и системной среды, чтобы выяснить, где может быть установлена ​​Java, ищите javacpl.exe
smartexpert
12

В командной строке Windows просто введите:

set java_home

Или, если вам не нравится командная среда, вы можете проверить это из:

Пуск> Компьютер> Свойства системы> Дополнительные свойства системы. Затем откройте вкладку «Дополнительно»> «Переменные среды» и в системной переменной попытайтесь найти JAVA_HOME.

введите описание изображения здесь

AndroidDev
источник
Это дает мне папку JDK. Когда я запускаю System.getProperty ("java.home") на рабочем листе Scala, он дает мне подпапку jre. Очевидно, в Java Home есть некоторая двусмысленность.
Ион Фриман
11

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

C:>dir /b /s java.exe

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

Томас Бендер
источник
10

Подробнее о Windows ... переменная java.home не всегда находится в том же месте, что и исполняемый файл.

Как говорит Denis The Menace, установщик помещает Java-файлы в Program Files , а также java.exe в System32 . Ява- версия не имеет ничего общего с 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 .

Мойка поворачивается
источник
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
PeterMmm
источник
4
не должна ли она сначала скомпилировать это?
Ирвин
2
Это найдет JRE, если он установлен и сначала на пути.
Джон Страйер
9

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

$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
majkinetor
источник
1
Для JDK 11 используйте$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Diomidis Spinellis
6

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

sblundy
источник
Ага. Echo %PATH%. Похоже, у меня c:\Program Files\Javaна Windows 7
Марк Ирвин
5

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

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

$ set | grep "JAVA_HOME" 

источник
Благодаря Roflcoptr, было действительно полезно узнать о «множестве». В моей системе отображаются две записи для одной и той же переменной, как я могу удалить неправильную.
Ашин
3

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

which java

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

echo %PATH%
Майкл Боргвардт
источник
Я тоже собирался дать этот ответ, но он явно ищет ответ из окон.
Дон Брэнсон
@DonBranson Он изменил текст, чтобы включить Windows после этого сообщения отправлено.
EntangledLoops
2

Ни один из этих ответов не подходит для 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.

EntangledLoops
источник
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
jameshfisher
источник
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

Для окон:

@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

Эта ссылка может помочь объяснить, как найти исполняемый файл Java из bash: http://srcode.org/2014/05/07/detect-java-executable/

Цянь Чен
источник
1
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится.
Shaiful Islam
1
Спасибо @ShaifulIslam, ваша точка зрения верна. Я добавил код по ссылке.
Цянь Чен
0

Я улучшил ответ 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-битному реестру

JohnP2
источник
0

Скрипт для 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
Rudixx
источник