Як знайти місце встановлення 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.