Як знайти місце встановлення 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 в програмних файлах
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
невідомо

1
Оновлено відповідь за допомогою прикладів Linux / Unix / Mac OS X та Windows.
Пабло Санта-Крус

125
where javaпрацює в Windows (принаймні, як у Windows 7) Але якщо ви дійсно хочете JDK, а не JRE, вам потрібно шукати повернені каталоги для 'bin / javac /
Jon Strayer,

де java не дає повного шляху, якщо java.exe знаходиться на Шляху, тоді як рішення Pablo для ... краще робити.
Річард Джонсон

1
Один лайнер MacOS:ls -l $(which java) | awk '{print $11}'
msanford

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
У Windows це, де java
Pabitra Dash

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/… ) підручника для використання андроїд-студії, фактичний шлях не буде тим, що повертається командою вище. Швидше за все, у вас виникне щось на кшталт "C: \\ Program Files \ Java | <jdk>", де замість "jdk" у вас буде щось на зразок "jdk-10.0.1" для версії 10. JDK
Euler_Salter

96

У Windows в командному рядку

where javac


8
У Windows це, де java
Pabitra Dash

7
Зауважте, це працює лише в тому випадку, якщо javac знаходиться в PATH. Якщо його немає, ця команда скаже, що його не знайдено, але JDK все-таки можна встановити. Використовуйте інші методи, якщо PATH не був оновлений після встановлення JDK.
Микита Г.

1
які інші методи? Ви згадали, що використовуєте для% i в (javac.exe) do @echo. % ~ $ PATH: я , але, як ви писали, він не працюватиме, якщо ви не встановили його в PATH.
Німрод

30

У Windows за замовчуванням є: C:\Program Files\Java\jdk1.6.0_14(де цифри можуть відрізнятися, оскільки вони є версією).


як би ви отримали інший номер версії?
ЛЖ

просто поступово перейдіть до місця свого провідника, і ви побачите встановлену вами версію папки jdk.
ahnbizcad

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 є набір)
Himanshu Bhardwaj

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 не завжди є тим самим місцем розташування, як бінарний файл, який виконується.

Як каже Деніс Менас, інсталятор розміщує файли Java програми , а також java.exe в System32 . Без нічого, пов’язаного з Java, на шляху ява -версія все ще може працювати. Однак, коли програма PeterMmm запускається, вона повідомляє про значення файлів програми як 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\JavaWindows 7
Марк Ірвін

5

Просто виконайте set команду у своєму командному рядку. Потім ви бачите всі змінні середовища, які ви встановили.

Або якщо на Unix ви можете спростити його:

$ set | grep "JAVA_HOME" 

Спасибі Roflcoptr, справді було корисно дізнатися про "набір". У моїй системі він показує два записи для однієї змінної, як я можу видалити неправильну.
Ashine

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
Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
Шайф Іслам

1
Дякую @ShaifulIslam, твій погляд правильний. Я додав код із посилання.
Qian Chen

0

Я вдосконалив відповідь мюнсінга вище, перевіривши ключ реєстру в 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.