Jak mogę sprawdzić, gdzie JDK jest zainstalowany na moim komputerze z systemem Windows?


303

Muszę wiedzieć, gdzie JDK znajduje się na moim komputerze.

Po uruchomieniu Java -versionw cmd pokazuje wersję jako „1.6.xx”. Aby znaleźć lokalizację tego zestawu SDK na moim komputerze, próbowałem go użyć, echo %JAVA_HOME%ale pokazuje on tylko „JAVA_HOME” (ponieważ w moich zmiennych środowiskowych nie ma zestawu zmiennych „JAVA_PATH”).


1
niestety myślę, że niektóre z poniższych odpowiedzi mogą nie działać, ponieważ najwyraźniej coś się zmieniło w nowszych wersjach Javy. Dzisiaj pobrałem wersję 7.60 Java SDK. Po kilku poszukiwaniach znalazłem go w folderze C: \ Program Files (x86) \ Java \ jdk1.7.0_60. Była już zainstalowana starsza wersja 6 JRE. To było w C: \ Program Files \ Java i było na% PATH%, a nie na nowszej instalacji.
likejudo

1
Najlepsza odpowiedź znajduje się na dole, jedno-liniowy od majkinetor dla PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .CurrentVersion; (gp $ p / $ v) .JavaHome
JohnP2

jeszcze jedno, jeśli twój jdk byłby w pakiecie z pomysłem intellij, może być gdzieś blisko instalacji pomysłu. Dla mnie było to w folderze 1 powyżej katalogu pomysłów, a zmienna PATH wskazywała na jre w Program Files
KGS,

Odpowiedzi:


329

Jeśli używasz Linux / Unix / Mac OS X:

Spróbuj tego:

$ which java

Powinien podać dokładną lokalizację.

Następnie możesz JAVA_HOMEsamodzielnie ustawić zmienną środowiskową.

Na moim komputerze (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

Jeśli używasz systemu Windows:

c:\> for %i in (java.exe) do @echo.   %~$PATH:i

W rzeczywistości forma% VAR_NAME% to Windows
niebieski

1
Zaktualizowałem odpowiedź w przykładach Linux / Unix / Mac OS X i Windows.
Pablo Santa Cruz

125
where javadziała w systemie Windows (przynajmniej od Windows 7) Ale jeśli naprawdę chcesz JDK, a nie JRE, musisz poszukać w zwróconych katalogach 'bin / javac /
Jon Strayer

gdzie java nie podaje pełnej ścieżki, jeśli java.exe znajduje się na ścieżce, podczas gdy Pablo dla ... rozwiązanie to robi, jest to preferowane.
Richard Johnson

1
Jedno-liniowy system MacOS:ls -l $(which java) | awk '{print $11}'
msanford

111

Windows> Start> cmd>

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

Jeśli masz zainstalowany JDK, wyświetlana jest ścieżka,
na przykład:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe


16
Windows (7+) => gdzie javac.exe
hB0

6
W oknach to jest, gdzie java
Pabitra Dash

10
where javadziała tylko wtedy, gdy plik wykonywalny znajduje się w zmiennej PATH. Jeśli z jakiegokolwiek powodu, javac nie znajduje się na ścieżce, nie zwróci żadnego wyniku, ale to nie znaczy, że JDK nie jest zainstalowany. Tak więc w ogólnym przypadku rozwiązanie do wyszukiwania plików zaproponowane przez rozwiązanie @grokster gwarantuje wynik (myśl może zająć trochę czasu).
Nikita G.,

Funkcja „for-loop” nie działała, jednak znalazłem ją tutaj: C: \ Program Files (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar

Zwróć uwagę, że jeśli korzystasz z tego samouczka ( codelabs.developers.google.com/codelabs/... ), aby korzystać z Android Studio, rzeczywista ścieżka nie będzie zwracana przez powyższe polecenie. Najprawdopodobniej miałbyś coś w stylu „C: \\ Program Files \ Java | <jdk>”, gdzie zamiast „jdk” miałbyś coś w rodzaju „jdk-10.0.1” dla JDK w wersji 10.
Euler_Salter

96

W systemie Windows w wierszu polecenia

where javac


8
W oknach jest to, gdzie java
Pabitra Dash

7
Uwaga: działa to tylko wtedy, gdy javac znajduje się w ŚCIEŻCE. Jeśli nie, to polecenie powie, że nie znaleziono, ale JDK może być nadal zainstalowany. Użyj innych metod, jeśli ŚCIEŻKA nie została zaktualizowana po instalacji JDK.
Nikita G.,

1
jakie inne metody Wspomniałeś o użyciu dla% i w (javac.exe) do @echo. % ~ $ PATH: ja , ale jak napisałeś, nie zadziała, jeśli nie ustawiłeś go w PATH.
Nimrod

30

W systemie Windows wartością domyślną jest: C:\Program Files\Java\jdk1.6.0_14(gdzie liczby mogą się różnić, ponieważ są wersją).


jak uzyskać różny numer wersji?
LZH

po prostu przejdź do lokalizacji stopniowo z eksploratora, a zobaczysz zainstalowaną wersję folderu jdk.
ahnbizcad

26

Instalator Java umieszcza kilka plików w folderze% WinDir% \ System32 (java.exe, javaws.exe i kilka innych). Gdy wpiszesz java.exe w wierszu polecenia lub utworzysz proces bez pełnej ścieżki, system Windows uruchomi je w ostateczności, jeśli brakuje ich w folderach% PATH%.

Możesz wyszukać wszystkie wersje Java zainstalowane w rejestrze. Spójrz na HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Environment i HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment dla 32-bitowej wersji Java w 64-bitowym systemie Windows.

W ten sposób sama Java wykrywa zainstalowane różne wersje. I dlatego zarówno wersja 32-bitowa, jak i wersja 64-bitowa mogą współistnieć i działają dobrze bez ingerencji.


23

Proste i proste na platformach Windows:

gdzie java


8
Powoduje to niewłaściwą lokalizację Java C: \ WINDOWS \ System32 \ java.exe. Ale rzeczywisty jdk jest zainstalowany w C: \ Java \ jdk1.7.0 \ (ponieważ jest ustawiony JAVA_HOME)
Himanshu Bhardwaj

17

Poniższy skrypt wsadowy wydrukuje istniejące domyślne środowisko JRE. To może być łatwo modyfikowane, aby znaleźć wersję JDK zainstalowane zastępując Java Runtime Environment z 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

W systemie Windows 10 możesz znaleźć ścieżkę, przechodząc do Panelu sterowania> Java. W panelu, który się pojawi, możesz znaleźć ścieżkę, jak pokazano na zrzucie ekranu poniżej. W panelu sterowania Java przejdź do zakładki „Java”, a następnie kliknij przycisk „Widok” pod opisem „Wyświetl wersje środowiska Java Runtime i ustawienia dla aplikacji i apletów Java”.

Powinno to działać w systemie Windows 7 i ewentualnie innych najnowszych wersjach systemu Windows.

wprowadź opis zdjęcia tutaj


Korzystam z systemu Windows 10 i w panelu sterowania nie ma Java
Lang React Dev

1
Czy jesteś pewien, że Java jest zainstalowana i została zainstalowana przy użyciu pakietu instalacyjnego systemu Windows?
smartexpert

Możesz spróbować spojrzeć na swoje konto i systemowe zmienne środowiskowe, aby dowiedzieć się, gdzie można zainstalować java, poszukaj javacpl.exe
smartexpert

12

W wierszu polecenia systemu Windows wpisz:

set java_home

Lub, jeśli nie podoba ci się środowisko poleceń, możesz to sprawdzić w:

Menu Start> Komputer> Właściwości systemu> Zaawansowane właściwości systemu. Następnie otwórz kartę Zaawansowane> Zmienne środowiskowe i w zmiennej systemowej spróbuj znaleźć JAVA_HOME.

wprowadź opis zdjęcia tutaj


To daje mi folder jdk. Kiedy uruchamiam System.getProperty („java.home”) w arkuszu Scala, daje mi to podfolder jre. Wygląda na to, że Java Home ma niejasności.
Ion Freeman,

11

W systemie Windows możesz używać

C:>dir /b /s java.exe

aby wydrukować pełną ścieżkę każdego pliku „java.exe” na dysku C:, niezależnie od tego, czy znajdują się one w zmiennej środowiskowej PATH.


10

Więcej informacji o systemie Windows ... zmienna java.home nie zawsze jest tą samą lokalizacją, co uruchamiany plik binarny.

Jak mówi Denis The Menace, instalator umieszcza pliki Java w plikach programu , ale także java.exe w System32 . Bez ścieżki Java na ścieżce java -version może nadal działać. Jednak po uruchomieniu programu PeterMmm zgłasza wartość plików programu jako java.home , to nie jest źle (Java jest tam zainstalowana), ale faktycznie uruchamiany plik binarny znajduje się w System32 .

Jednym ze sposobów, aby dopaść lokalizację java.exe binarnego, dodaj następującą linię kodu PeterMmm by zachować program działa trochę dłużej:

try{Thread.sleep(60000);}catch(Exception e) {}

Skompiluj i uruchom go, a następnie wyszukaj lokalizację obrazu java.exe . Np. W Windows 7 otwórz menedżera zadań, znajdź pozycję java.exe , kliknij prawym przyciskiem myszy i wybierz „otwórz lokalizację pliku”, to otworzy dokładną lokalizację pliku binarnego Java. W tym przypadku byłby to System32 .


9

Uruchom ten program z wiersza poleceń:

// 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
czy nie musiałaby tego najpierw skompilować?
Irwin,

2
To znajdzie JRE, jeśli jest zainstalowane i najpierw na ścieżce.
Jon Strayer

9

Wkładka PowerShell One:

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

1
W przypadku JDK 11$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Diomidis Spinellis,

6

Próbowałeś sprawdzić swoją zmienną% PATH%. Właśnie tego używa Windows, aby znaleźć dowolny plik wykonywalny.


Tak. Echo %PATH%. Mój wydaje się być w c:\Program Files\Javasystemie Windows 7
Mark Irvin

5

Wystarczy wykonać setpolecenie w linii poleceń. Następnie zobaczysz wszystkie ustawione zmienne środowiskowe.

Lub jeśli na Uniksie możesz to uprościć:

$ set | grep "JAVA_HOME" 

Dzięki Roflcoptr naprawdę przydało się poznanie „zestawu”. W moim systemie pokazuje dwa wpisy dla tej samej zmiennej, jak mogę usunąć niepoprawny.
Ashine,

3

Jest to specyficzne dla systemu operacyjnego. W systemie Unix:

which java

wyświetli ścieżkę do pliku wykonywalnego. Nie znam odpowiednika systemu Windows, ale tam zwykle masz binfolder instalacji JDK w systemie PATH:

echo %PATH%

Ja też zamierzam udzielić tej odpowiedzi, ale najwyraźniej szuka odpowiedzi na okno.
Don Branson

@DonBranson Po przesłaniu tego postu zmienił tekst na Windows.
EntangledLoops

2

Żadna z tych odpowiedzi nie jest poprawna dla Linuksa, jeśli szukasz domu zawierającego podkatalogi, takie jak: bin, docs, include, jre, lib itp.

W Ubuntu dla openjdk1.8.0 jest to: /usr/lib/jvm/java-1.8.0-openjdk-amd64

i możesz tego użyć, JAVA_HOMEponieważ będziesz mógł znaleźć nagłówki, jeśli zbudujesz pliki źródłowe JNI. Chociaż prawda which javazapewnia ścieżkę binarną, nie jest to prawdziwy dom JDK.


1

W systemie macOS uruchom:

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

Na moim komputerze to drukuje:

/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home

Zauważ, że uruchomienie which javanie pokazuje położenia JDK, ponieważ javapolecenie jest zamiast tego częścią JavaVM.framework, która otacza prawdziwy 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

Dla Windowsa:

@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

Ten link może pomóc wyjaśnić, jak znaleźć plik wykonywalny Java z bash: http://srcode.org/2014/05/07/detect-java-executable/


1
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
Shaiful Islam,

1
Dzięki @ShaifulIslam, masz rację. Dodałem kod z linku.
Qian Chen,

0

Poprawiłem powyższą odpowiedź munsingh , testując klucz rejestru w rejestrach 64-bitowych i 32-bitowych, w razie potrzeby:

::- 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%"

odniesienie do dostępu do rejestru 64-bitowego


0

Skrypt dla 32/64-bitowego systemu 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.