Come trovo dove è installato JDK sul mio computer Windows?


303

Devo sapere dove si trova JDK sulla mia macchina.

In esecuzione Java -versionin cmd , mostra la versione come '1.6.xx'. Per trovare la posizione di questo SDK sulla mia macchina ho provato a usarlo echo %JAVA_HOME%ma mostra solo "JAVA_HOME" (in quanto non è presente alcuna variante "JAVA_PATH" nelle variabili di ambiente).


1
sfortunatamente, penso che alcune delle risposte che seguono potrebbero non funzionare perché apparentemente qualcosa è cambiato con le versioni più recenti di Java. Oggi ho scaricato l'SDK Java versione 7.60. Dopo alcune ricerche, l'ho trovato in C: \ Programmi (x86) \ Java \ jdk1.7.0_60. Era già installata una versione precedente di JRE 6. Era in C: \ Programmi \ Java e questo era su% PATH%, non sulla nuova installazione.
likejudo,

1
La risposta migliore è in fondo, una riga di Majkinetor per PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .CurrentVersion; (gp $ p / $ v) .JavaHome
JohnP2

un'altra cosa, se il tuo jdk è stato fornito in bundle con l'intellij idea, potrebbe essere vicino all'installazione dell'idea. Per me era in una cartella 1 nella cartella dell'idea, e la variabile PATH indicava un jre in Program Files
KGS

Risposte:


329

Se si utilizza Linux / Unix / Mac OS X:

Prova questo:

$ which java

Dovrebbe produrre la posizione esatta.

Successivamente, puoi impostare JAVA_HOMEtu stesso la variabile di ambiente.

Nel mio 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

Se stai usando Windows:

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

In realtà, il modulo% VAR_NAME% è Windows
sblundy

1
Aggiornata la risposta con esempi Linux / Unix / Mac OS X e Windows.
Pablo Santa Cruz,

125
where javafunziona in Windows (almeno da Windows 7) Ma se vuoi davvero un JDK e non un JRE devi cercare nelle directory restituite 'bin / javac /
Jon Strayer,

dove java non fornisce il percorso completo se java.exe si trova sul percorso, mentre la soluzione di Pablo per ... è preferibile.
Richard Johnson,

1
MacOS one-liner:ls -l $(which java) | awk '{print $11}'
msanford,

111

Windows> Start> cmd>

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

Se è installato un JDK, viene visualizzato il percorso,
ad esempio:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe


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

6
In windows è, dove java
Pabitra Dash,

10
where javafunziona solo se l'eseguibile si trova nel PERCORSO. Se per qualsiasi motivo, javac non è nel percorso, non restituirà alcun risultato, ma non significa che JDK non sia installato. Quindi, in generale, la soluzione di ricerca di file proposta dalla soluzione @grokster garantirà un risultato (il completamento potrebbe richiedere del tempo).
Nikita G.,

La roba 'for-loop' non ha funzionato, tuttavia, l'ho trovata qui: C: \ Programmi (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar

Nota che se stai seguendo questo tutorial ( codelabs.developers.google.com/codelabs/… ) per utilizzare Android Studio, il percorso effettivo non sarebbe quello che viene restituito dal comando sopra. Molto probabilmente, avresti qualcosa come "C: \\ Programmi \ Java | <jdk>" dove invece di "jdk" avresti qualcosa come "jdk-10.0.1" per JDK versione 10.
Euler_Salter

96

In Windows al prompt dei comandi

where javac


8
In windows è, dove java
Pabitra Dash,

7
Nota, questo funziona solo se javac è nel PERCORSO. In caso contrario, questo comando dirà che non è stato trovato, ma JDK potrebbe ancora essere installato. Utilizzare altri metodi se il PERCORSO non è stato aggiornato dopo l'installazione di JDK.
Nikita G.,

1
quali altri metodi? Hai menzionato l'utilizzo di% i in (javac.exe) do @echo. % ~ $ PERCORSO: i , ma come hai scritto, non funzionerà se non lo hai impostato nel PERCORSO.
Nimrod,

30

In Windows il valore predefinito è: C:\Program Files\Java\jdk1.6.0_14(dove i numeri possono differire, poiché sono la versione).


come recupereresti il ​​numero di versione diverso?
LZH

vai alla posizione in modo incrementale dal tuo Explorer e vedrai la versione della cartella jdk che hai installato.
ahnbizcad,

26

Il programma di installazione Java inserisce diversi file nella cartella% WinDir% \ System32 (java.exe, javaws.exe e alcuni altri). Quando si digita java.exe nella riga di comando o si crea un processo senza percorso completo, Windows li esegue come ultima risorsa se mancano nelle cartelle% PATH%.

È possibile cercare tutte le versioni di Java installate nel registro. Dai un'occhiata a HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Environment e HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment per Java a 32 bit su Windows a 64 bit.

Ecco come java stesso scopre diverse versioni installate. Questo è il motivo per cui entrambe le versioni a 32 e 64 bit possono coesistere e funzionano bene senza interferire.


23

Chiaro e semplice su piattaforme Windows:

dove java


8
Il risultato è una posizione Java errata C: \ WINDOWS \ System32 \ java.exe. Ma l'attuale jdk è installato in C: \ Java \ jdk1.7.0 \ (come è impostato JAVA_HOME)
Himanshu Bhardwaj,

17

Lo script batch di seguito stamperà il JRE predefinito esistente. Può essere facilmente modificato per trovare la versione JDK installata sostituendo Java Runtime Environment con 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

Su Windows 10 puoi scoprire il percorso andando su Pannello di controllo> Java. Nel pannello che appare, puoi trovare il percorso come mostrato nello screenshot qui sotto. Nel pannello di controllo Java, vai alla scheda "Java" e fai clic sul pulsante "Visualizza" sotto la descrizione "Visualizza e gestisci le versioni e le impostazioni di Java Runtime per le applicazioni e le applet Java".

Questo dovrebbe funzionare su Windows 7 e possibilmente su altre versioni recenti di Windows.

inserisci qui la descrizione dell'immagine


Sono su Windows 10 e non c'è java nel pannello di controllo
Lang React Dev

1
Sei sicuro che Java sia installato ed è stato installato usando il pacchetto di installazione di Windows?
smartexpert,

Puoi provare a guardare le variabili del tuo account e dell'ambiente di sistema per scoprire dove potrebbe essere installato java, cercare javacpl.exe
smartexpert

12

Al prompt dei comandi di Windows, digitare:

set java_home

Oppure, se non ti piace l'ambiente di comando, puoi controllarlo da:

Menu Start> Computer> Proprietà del sistema> Proprietà di sistema avanzate. Quindi apri la scheda Avanzate> Variabili d'ambiente e nella variabile di sistema prova a trovare JAVA_HOME.

inserisci qui la descrizione dell'immagine


Questo mi dà la cartella jdk. Quando eseguo System.getProperty ("java.home") in un foglio di lavoro Scala, mi dà la sottocartella jre. Apparentemente c'è qualche ambiguità su Java Home.
Ion Freeman,

11

Sotto Windows, puoi usare

C:>dir /b /s java.exe

per stampare il percorso completo di ogni "java.exe" sull'unità C: indipendentemente dal fatto che si trovino sulla variabile di ambiente PATH.


10

Altro su Windows ... java.home non è sempre nella stessa posizione del file binario che viene eseguito.

Come dice Denis The Menace, il programma di installazione inserisce i file Java in Programmi , ma anche java.exe in System32 . Senza nulla di Java relativo al percorso java -version può ancora funzionare. Tuttavia, quando viene eseguito il programma di PeterMmm , riporta il valore di Program Files come java.home , questo non è sbagliato (Java è installato lì) ma il binario effettivo in esecuzione si trova in System32 .

Un modo per dare la caccia alla posizione del file binario java.exe , aggiungere la seguente riga al codice di PeterMmm per mantenere il programma in esecuzione per un po 'di più:

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

Compilalo ed eseguilo, quindi dai la caccia alla posizione dell'immagine java.exe . Ad esempio, in Windows 7, apri il task manager, trova la voce java.exe , fai clic con il tasto destro e seleziona 'apri posizione file', questo apre la posizione esatta del binario Java. In questo caso sarebbe System32 .


9

Esegui questo programma dalla riga di comando:

// 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
non avrebbe dovuto compilare questo prima?
Irwin,

2
Questo troverà un JRE se è installato e prima sul percorso.
Jon Strayer,

9

Powershell one liner:

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

1
Per JDK 11 usare$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Diomidis Spinellis l'

6

Hai provato a guardare la tua variabile% PATH%. Questo è ciò che Windows utilizza per trovare qualsiasi eseguibile.


Sì. Echo %PATH%. Il mio sembra essere c:\Program Files\Javasu Windows 7
Mark Irvin

5

Esegui semplicemente il setcomando nella tua riga di comando. Quindi vedi tutte le variabili di ambiente che hai impostato.

O se su Unix puoi semplificarlo:

$ set | grep "JAVA_HOME" 

Grazie a Roflcoptr, è stato davvero utile conoscere 'set'. Nel mio sistema mostra due voci per la stessa variabile, come posso eliminare quella errata.
Ashine,

3

Questo è specifico del sistema operativo. Su Unix:

which java

visualizzerà il percorso dell'eseguibile. Non conosco un equivalente di Windows, ma in genere hai la bincartella dell'installazione JDK nel sistema PATH:

echo %PATH%

Avrei dato anche quella risposta, ma sta chiaramente cercando una risposta per Windows.
Don Branson,

@DonBranson Ha cambiato il testo per includere Windows dopo l'invio di questo post.
EntangledLoops,

2

Nessuna di queste risposte è corretta per Linux se stai cercando la home che include i sottodir come bin, documenti, include, jre, lib, ecc.

Su Ubuntu per openjdk1.8.0, questo è in: /usr/lib/jvm/java-1.8.0-openjdk-amd64

e potresti preferire usarlo per JAVA_HOMEpoiché sarai in grado di trovare le intestazioni se costruisci i file sorgente JNI. Sebbene sia vero which javafornirà il percorso binario, non è la vera home JDK.


1

Su macOS, esegui:

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

Sulla mia macchina, questo stampa:

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

Si noti che l'esecuzione which javanon mostra l'ubicazione JDK, poiché il javacomando è invece parte di JavaVM.framework, che avvolge il JDK reale:

$ 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

Per 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

Questo link potrebbe aiutare a spiegare come trovare java eseguibile da bash: http://srcode.org/2014/05/07/detect-java-executable/


1
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
Shaiful Islam,

1
Grazie @ShaifulIslam, il tuo punto è giusto. Ho aggiunto il codice dal link.
Qian Chen,

0

Ho migliorato la risposta di munsingh sopra testando la chiave di registro nei registri a 64 e 32 bit, se necessario:

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

riferimento per l'accesso al registro a 64 bit


0

Script per Windows a 32/64 bit.

@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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.