Wie finde ich heraus, wo JDK auf meinem Windows-Computer installiert ist?

303

Ich muss wissen, wo sich JDK auf meinem Computer befindet.

Beim Ausführen Java -versionin cmd wird die Version als '1.6.xx' angezeigt. Um den Speicherort dieses SDK auf meinem Computer zu ermitteln, habe ich versucht echo %JAVA_HOME%, es zu verwenden, aber es zeigt nur 'JAVA_HOME' an (da in meinen Umgebungsvariablen keine 'JAVA_PATH'-Variable festgelegt ist).

Ashine
quelle
1
Leider denke ich, dass einige der folgenden Antworten möglicherweise nicht funktionieren, da sich anscheinend etwas mit neueren Java-Versionen geändert hat. Heute habe ich das Java SDK der Version 7.60 heruntergeladen. Nach einiger Suche finden Sie es unter C: \ Programme (x86) \ Java \ jdk1.7.0_60. Es war bereits eine ältere Version 6 JRE installiert. Es war unter C: \ Programme \ Java und dies war auf dem% PATH% nicht die neuere Installation.
Likejudo
1
Die beste Antwort ist unten ein Einzeiler von Majkinetor für PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .CurrentVersion; (gp $ p / $ v) .JavaHome
JohnP2
Eine weitere Sache: Wenn Ihr JDK mit Intellij Idea gebündelt wurde, könnte es sich in der Nähe der Ideeninstallation befinden. Für mich war es in einem Verzeichnis 1 Ordner höher als der Ideenordner, und die Variable PATH zeigte auf einen jre in Program Files
KGS

Antworten:

329

Wenn Sie Linux / Unix / Mac OS X verwenden:

Versuche dies:

$ which java

Sollte den genauen Ort ausgeben.

Danach können Sie die JAVA_HOMEUmgebungsvariable selbst festlegen .

Auf meinem Computer (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

Wenn Sie Windows verwenden:

c:\> for %i in (java.exe) do @echo.   %~$PATH:i
Pablo Santa Cruz
quelle
Tatsächlich ist die Form% VAR_NAME% Windows
sblundy
1
Die Antwort wurde mit Beispielen für Linux / Unix / Mac OS X und Windows aktualisiert .
Pablo Santa Cruz
125
where javafunktioniert unter Windows (zumindest ab Windows 7). Wenn Sie jedoch wirklich ein JDK und kein JRE möchten, müssen Sie in den zurückgegebenen Verzeichnissen nach 'bin / javac /
Jon Strayer
Dabei gibt Java nicht den vollständigen Pfad an, wenn sich java.exe auf dem Pfad befindet, während Pablos for ... -Lösung dies vorzuziehen ist.
Richard Johnson
1
MacOS ls -l $(which java) | awk '{print $11}'
Einzeiler
111

Windows> Start> cmd>

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

Wenn Sie ein JDK installiert haben, wird der Pfad angezeigt,
zum Beispiel:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe

Grokster
quelle
16
Windows (7+) => wo javac.exe
hB0
6
In Windows ist es, wo Java
Pabitra Dash
10
where javafunktioniert nur, wenn sich die ausführbare Datei im PATH befindet. Wenn sich javac aus irgendeinem Grund nicht im Pfad befindet, wird kein Ergebnis zurückgegeben, dies bedeutet jedoch nicht, dass JDK nicht installiert ist. Im Allgemeinen garantiert die von @grokster solution vorgeschlagene Dateisuchlösung ein Ergebnis (es kann einige Zeit dauern, bis der Vorgang abgeschlossen ist).
Nikita G.
Das 'for-loop'-Zeug hat nicht funktioniert, aber ich habe es hier gefunden: C: \ Programme (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar
Beachten Sie, dass, wenn Sie diesem Tutorial ( codelabs.developers.google.com/codelabs/… ) zur Verwendung von Android Studio folgen , der tatsächliche Pfad nicht dem entspricht, der vom obigen Befehl zurückgegeben wird. Höchstwahrscheinlich hätten Sie so etwas wie "C: \\ Programme \ Java | <jdk>", wobei Sie anstelle von "jdk" so etwas wie "jdk-10.0.1" für JDK Version 10 hätten.
Euler_Salter
96

In Windows an der Eingabeaufforderung

where javac

NanoBennett
quelle
8
In Windows ist es, wo Java
Pabitra Dash
7
Beachten Sie, dass dies nur funktioniert, wenn sich Javac im PFAD befindet. Wenn dies nicht der Fall ist, gibt dieser Befehl an, dass er nicht gefunden wurde, JDK jedoch weiterhin installiert werden kann. Verwenden Sie andere Methoden, wenn Ihr PATH nach der JDK-Installation nicht aktualisiert wurde.
Nikita G.
1
Welche anderen Methoden? Sie haben die Verwendung von% i in (javac.exe) do @echo erwähnt. % ~ $ PATH: i , aber wie Sie geschrieben haben, funktioniert es nicht, wenn Sie es nicht im PATH festgelegt haben.
Nimrod
30

In Windows lautet die Standardeinstellung: C:\Program Files\Java\jdk1.6.0_14(wobei sich die Zahlen unterscheiden können, da es sich um die Version handelt).

Ronen Rabinovici
quelle
Wie würden Sie die unterschiedliche Versionsnummer abrufen?
LZH
Navigieren Sie einfach schrittweise von Ihrem Explorer zum Speicherort, und Sie sehen die von Ihnen installierte Version des JDK-Ordners.
Ahnbizcad
26

Das Java-Installationsprogramm legt mehrere Dateien im Ordner% WinDir% \ System32 ab (java.exe, javaws.exe und einige andere). Wenn Sie java.exe in die Befehlszeile eingeben oder einen Prozess ohne vollständigen Pfad erstellen, führt Windows diese als letzten Ausweg aus, wenn sie in% PATH% -Ordnern fehlen.

Sie können alle in der Registrierung installierten Java-Versionen nachschlagen. Schauen Sie sich HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Environment und HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment für 32-Bit-Java unter 64-Bit-Windows an.

Auf diese Weise findet Java selbst heraus, dass verschiedene Versionen installiert sind. Aus diesem Grund können sowohl die 32-Bit- als auch die 64-Bit-Version nebeneinander existieren und funktionieren einwandfrei.

Denis Die Bedrohung
quelle
23

Schlicht und einfach auf Windows-Plattformen:

wo Java

Luccaa
quelle
8
Dies führt zu einem falschen Java-Speicherort C: \ WINDOWS \ System32 \ java.exe. Aber das eigentliche JDK wird unter C: \ Java \ jdk1.7.0 \ installiert (wie JAVA_HOME festgelegt ist)
Himanshu Bhardwaj
17

Das folgende Batch-Skript druckt die vorhandene Standard-JRE aus. Es kann leicht geändert werden, um die installierte JDK-Version zu finden, indem die Java-Laufzeitumgebung durch das Java Development Kit ersetzt wird .

@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
quelle
16

Unter Windows 10 können Sie den Pfad unter Systemsteuerung> Java ermitteln. In dem angezeigten Bereich finden Sie den Pfad, wie im folgenden Screenshot gezeigt. Wechseln Sie in der Java-Systemsteuerung zur Registerkarte "Java" und klicken Sie auf die Schaltfläche "Ansicht" unter der Beschreibung "Anzeigen und Verwalten von Java Runtime-Versionen und -Einstellungen für Java-Anwendungen und -Applets".

Dies sollte unter Windows 7 und möglicherweise anderen neueren Windows-Versionen funktionieren.

Geben Sie hier die Bildbeschreibung ein

smartexpert
quelle
Ich bin auf Windows 10 und es gibt kein Java in der Systemsteuerung
Lang React Dev
1
Sind Sie sicher, dass Java installiert ist und mit dem Windows-Installationspaket installiert wurde?
smartexpert
Sie können versuchen, Ihre Konto- und Systemumgebungsvariablen zu überprüfen, um herauszufinden, wo Java installiert sein könnte. Suchen
Sie
12

Geben Sie an einer Windows-Eingabeaufforderung einfach Folgendes ein:

set java_home

Wenn Ihnen die Befehlsumgebung nicht gefällt, können Sie sie folgendermaßen überprüfen:

Startmenü> Computer> Systemeigenschaften> Erweiterte Systemeigenschaften. Öffnen Sie dann die Registerkarte Erweitert> Umgebungsvariablen und versuchen Sie in der Systemvariablen, JAVA_HOME zu finden.

Geben Sie hier die Bildbeschreibung ein

AndroidDev
quelle
Dies gibt mir den JDK-Ordner. Wenn ich System.getProperty ("java.home") in einem Scala-Arbeitsblatt ausführe, wird mir der Unterordner jre angezeigt. Es gibt anscheinend einige Unklarheiten über Java Home.
Ion Freeman
11

Unter Windows können Sie verwenden

C:>dir /b /s java.exe

um den vollständigen Pfad jeder "java.exe" auf Ihrem Laufwerk C: zu drucken, unabhängig davon, ob sie sich in Ihrer Umgebungsvariablen PATH befinden.

Thomas Bender
quelle
10

Mehr unter Windows ... Die Variable java.home ist nicht immer derselbe Speicherort wie die ausgeführte Binärdatei.

Wie Denis The Menace sagt, fügt das Installationsprogramm Java-Dateien in Programmdateien , aber auch java.exe in System32 ein . Ohne Java auf dem Pfad kann Java-Version immer noch funktionieren. Wenn das Programm von PeterMmm ausgeführt wird, meldet es jedoch den Wert der Programmdateien als java.home . Dies ist nicht falsch (Java ist dort installiert), aber die tatsächlich ausgeführte Binärdatei befindet sich in System32 .

Um den Speicherort der Binärdatei java.exe zu ermitteln , fügen Sie dem Code von PeterMmm die folgende Zeile hinzu, damit das Programm noch eine Weile läuft:

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

Kompilieren und führen Sie es aus und suchen Sie dann den Speicherort des Bildes java.exe . Öffnen Sie beispielsweise in Windows 7 den Task-Manager, suchen Sie den Eintrag java.exe , klicken Sie mit der rechten Maustaste und wählen Sie "Dateispeicherort öffnen". Dadurch wird der genaue Speicherort der Java-Binärdatei geöffnet. In diesem Fall wäre es System32 .

Moika dreht sich um
quelle
9

Führen Sie dieses Programm über die Befehlszeile aus:

// 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
quelle
4
würde sie das nicht zuerst kompilieren müssen?
Irwin
2
Dadurch wird eine JRE gefunden, wenn sie installiert ist und sich zuerst auf dem Pfad befindet.
Jon Strayer
9

Powershell One Liner:

$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Majkinetor
quelle
1
Für JDK 11 verwenden$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Diomidis Spinellis
6

Haben Sie versucht, Ihre Variable% PATH% zu betrachten? Das ist es, was Windows verwendet, um eine ausführbare Datei zu finden.

sblundy
quelle
Ja. Echo %PATH%. Meins scheint unter c:\Program Files\JavaWindows 7 zu sein
Mark Irvin
5

Führen Sie einfach die aus set Befehl in Ihrer Befehlszeile aus. Dann sehen Sie alle Umgebungsvariablen, die Sie festgelegt haben.

Oder wenn Sie es unter Unix vereinfachen können:

$ set | grep "JAVA_HOME" 

quelle
Dank Roflcoptr war es in der Tat nützlich, etwas über 'set' zu lernen. In meinem System werden zwei Einträge für dieselbe Variable angezeigt. Wie kann ich den falschen löschen?
Ashine
3

Dies ist betriebssystemspezifisch. Unter Unix:

which java

zeigt den Pfad zur ausführbaren Datei an. Ich kenne kein Windows-Äquivalent, aber dort befindet sich normalerweise der binOrdner der JDK-Installation im System PATH:

echo %PATH%
Michael Borgwardt
quelle
Ich wollte diese Antwort auch geben, aber er sucht eindeutig nach einer Windows-Antwort.
Don Branson
@ DonBranson Er hat den Text geändert, um Windows einzuschließen, nachdem dieser Beitrag eingereicht wurde.
EntangledLoops
2

Keine dieser Antworten ist für Linux korrekt, wenn Sie nach einem Home suchen, das die Unterverzeichnisse enthält: bin, docs, include, jre, lib usw.

Unter Ubuntu für openjdk1.8.0 ist dies in: /usr/lib/jvm/java-1.8.0-openjdk-amd64

und Sie können es vorziehen, dies zu verwenden, JAVA_HOMEda Sie Header finden können, wenn Sie JNI-Quelldateien erstellen. Während es wahr ist, which javawird es den binären Pfad bereitstellen, aber es ist nicht das wahre JDK-Zuhause.

EntangledLoops
quelle
1

Führen Sie unter macOS Folgendes aus:

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

Auf meinem Computer wird Folgendes gedruckt:

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

Beachten Sie, dass beim Ausführen which javader JDK-Speicherort nicht angezeigt wird, da der javaBefehl stattdessen Teil von ist JavaVM.framework, der das echte JDK umschließt:

$ 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
Jamesfischer
quelle
0

in Windows cmd:

set "JAVA_HOME" 
Husam
quelle
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

Für Windows:

@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

Dieser Link kann hilfreich sein, um zu erklären, wie Sie eine ausführbare Java-Datei von bash finden: http://srcode.org/2014/05/07/detect-java-executable/

Qian Chen
quelle
1
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
Shaiful Islam
1
Danke @ShaifulIslam, dein Punkt ist richtig. Ich habe den Code über den Link hinzugefügt.
Qian Chen
0

Ich habe die Antwort von munsingh oben verbessert, indem ich bei Bedarf in 64-Bit- und 32-Bit-Registern nach dem Registrierungsschlüssel getestet habe:

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

Referenz für den Zugriff auf die 64-Bit-Registrierung

JohnP2
quelle
0

Skript für 32/64 Bit 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
quelle