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


303

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

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


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


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


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:

где ява


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

16

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

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

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


Я нахожусь на Windows 10, и нет никакой Java в панели управления
— Lang React Dev

1
Вы уверены, что Java установлена ​​и была установлена ​​с помощью установочного пакета Windows?
— smartexpert

Вы можете попытаться просмотреть переменные своей учетной записи и системной среды, чтобы выяснить, где может быть установлена ​​Java, ищите javacpl.exe
— smartexpert

12

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

set java_home

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

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

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


Это дает мне папку 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

4
не должна ли она сначала скомпилировать это?
— Ирвин

2
Это найдет JRE, если он установлен и сначала на пути.
— Джон Страйер

9

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

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

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

6

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


Ага. 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.


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


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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.