Comment savoir où JDK est installé sur ma machine Windows?

303

J'ai besoin de savoir où se trouve JDK sur ma machine.

Lors de l'exécution Java -versionen cmd , il affiche la version comme '1.6.xx'. Pour trouver l'emplacement de ce SDK sur ma machine, j'ai essayé d'utiliser, echo %JAVA_HOME%mais il n'affiche que «JAVA_HOME» (car il n'y a pas de var «JAVA_PATH» dans mes variables d'environnement).

Ashine
la source
1
malheureusement, je pense que certaines des réponses ci-dessous peuvent ne pas fonctionner car apparemment quelque chose a changé avec les versions plus récentes de Java. Aujourd'hui, j'ai téléchargé la version 7.60 Java SDK. Après quelques recherches, je l'ai trouvé dans C: \ Program Files (x86) \ Java \ jdk1.7.0_60. Une ancienne version 6 de JRE était déjà installée. C'était dans C: \ Program Files \ Java et c'était sur le% PATH% pas la nouvelle installation.
likejudo
1
La meilleure réponse est en bas, une ligne de majkinetor pour PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .CurrentVersion; (gp $ p / $ v) .JavaHome
JohnP2
une autre chose, si votre jdk était fourni avec intellij idea, il pourrait être quelque part près de l'installation de l'idée. Pour moi, il se trouvait dans un répertoire de dossier 1 à partir du dossier d'idées, et la variable PATH pointait vers un jre dans Program Files
KGS

Réponses:

329

Si vous utilisez Linux / Unix / Mac OS X:

Essaye ça:

$ which java

Devrait sortir l'emplacement exact.

Après cela, vous pouvez définir JAVA_HOMEvous-même la variable d'environnement.

Sur mon ordinateur (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

Si vous utilisez Windows:

c:\> for %i in (java.exe) do @echo.   %~$PATH:i
Pablo Santa Cruz
la source
En fait, le formulaire% VAR_NAME% est Windows
sblundy
1
Mise à jour de la réponse avec des exemples Linux / Unix / Mac OS X et Windows.
Pablo Santa Cruz
125
where javafonctionne sous Windows (au moins à partir de Windows 7) Mais si vous voulez vraiment un JDK et non un JRE, vous devez chercher dans les répertoires renvoyés pour 'bin / javac /
Jon Strayer
où java ne donne pas le chemin complet si java.exe est sur le Chemin, alors que la solution for ... de Pablo le fait est préférable.
Richard Johnson
1
MacOS one-liner:ls -l $(which java) | awk '{print $11}'
msanford
111

Windows> Démarrer> cmd>

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

Si un JDK est installé, le chemin d'accès s'affiche,
par exemple:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe

grokster
la source
16
Windows (7+) => où javac.exe
hB0
6
Dans Windows c'est le cas, où java
Pabitra Dash
10
where javane fonctionne que si l'exécutable est dans le CHEMIN. Si pour une raison quelconque, javac n'est pas dans le chemin, il ne retournera aucun résultat, mais cela ne signifie pas que JDK n'est pas installé. Donc, dans le cas général, la solution de recherche de fichiers proposée par la solution @grokster garantira un résultat (la réflexion peut prendre du temps).
Nikita
Le truc 'for-loop' n'a pas fonctionné, cependant, je l'ai trouvé ici: C: \ Program Files (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar
Notez que si vous suivez ce didacticiel ( codelabs.developers.google.com/codelabs/… ) pour utiliser Android Studio, le chemin réel ne sera pas celui renvoyé par la commande ci-dessus. Très probablement, vous auriez quelque chose comme "C: \\ Program Files \ Java | <jdk>" où au lieu de "jdk" vous auriez quelque chose comme "jdk-10.0.1" pour JDK version 10.
Euler_Salter
96

Sous Windows à l'invite de commande

where javac

NanoBennett
la source
8
Dans Windows c'est, où java
Pabitra Dash
7
Remarque, cela ne fonctionne que si javac est dans le CHEMIN. Si ce n'est pas le cas, cette commande dira qu'elle n'est pas trouvée, mais JDK pourrait toujours être installé. Utilisez d'autres méthodes si votre PATH n'a pas été mis à jour après l'installation de JDK.
Nikita
1
quelles autres méthodes? Vous avez mentionné l'utilisation de% i dans (javac.exe) do @echo. % ~ $ PATH: i , mais comme vous l'avez écrit, cela ne fonctionnera pas si vous ne l'avez pas défini dans le PATH.
Nimrod
30

Dans Windows, la valeur par défaut est: C:\Program Files\Java\jdk1.6.0_14(où les nombres peuvent différer, car ils sont la version).

Ronen Rabinovici
la source
comment récupérer le numéro de version différent?
LZH
Naviguez simplement vers l'emplacement de façon progressive à partir de votre explorateur, et vous verrez la version du dossier jdk que vous avez installée.
ahnbizcad
26

Le programme d'installation de Java place plusieurs fichiers dans le dossier% WinDir% \ System32 (java.exe, javaws.exe et quelques autres). Lorsque vous tapez java.exe en ligne de commande ou créez un processus sans chemin d'accès complet, Windows les exécute en dernier recours s'ils sont manquants dans les dossiers% PATH%.

Vous pouvez rechercher toutes les versions de Java installées dans le registre. Jetez un œil à HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Environment et HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment pour Java 32 bits sur Windows 64 bits.

C'est ainsi que java découvre les différentes versions installées. Et c'est pourquoi les versions 32 bits et 64 bits peuvent coexister et fonctionner correctement sans interférer.

Denis La Menace
la source
23

Clair et simple sur les plateformes Windows:

où java

luccaa
la source
8
Il en résulte un emplacement Java incorrect C: \ WINDOWS \ System32 \ java.exe. Mais le jdk réel est installé dans C: \ Java \ jdk1.7.0 \ (comme JAVA_HOME est défini)
Himanshu Bhardwaj
17

Le script de commandes ci-dessous imprimera le JRE par défaut existant. Il peut être facilement modifié pour trouver la version JDK installée en remplaçant Java Runtime Environment par 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
munsingh
la source
16

Sur Windows 10, vous pouvez trouver le chemin en allant dans Panneau de configuration> Java. Dans le panneau qui s'affiche, vous pouvez trouver le chemin d'accès comme illustré dans la capture d'écran ci-dessous. Dans le panneau de configuration Java, accédez à l'onglet «Java», puis cliquez sur le bouton «Afficher» sous la description «Afficher et gérer les versions et les paramètres de Java Runtime pour les applications et applets Java».

Cela devrait fonctionner sur Windows 7 et éventuellement sur d'autres versions récentes de Windows.

entrez la description de l'image ici

smartexpert
la source
Je suis sur Windows 10 et il n'y a pas de Java dans le panneau de configuration
Lang React Dev
1
Êtes-vous sûr que Java est installé et qu'il a été installé à l'aide du package d'installation de Windows?
smartexpert
Vous pouvez essayer de regarder votre compte et les variables d'environnement système pour savoir où Java peut être installé, recherchez javacpl.exe
smartexpert
12

Dans une invite de commande Windows, tapez simplement:

set java_home

Ou, si vous n'aimez pas l'environnement de commande, vous pouvez le vérifier à partir de:

Menu Démarrer> Ordinateur> Propriétés système> Propriétés système avancées. Ensuite, ouvrez l'onglet Avancé> Variables d'environnement et dans la variable système, essayez de trouver JAVA_HOME.

entrez la description de l'image ici

AndroidDev
la source
Cela me donne le dossier jdk. Lorsque j'exécute System.getProperty ("java.home") dans une feuille de calcul Scala, cela me donne le sous-dossier jre. Il y a apparemment une certaine ambiguïté à propos de Java Home.
Ion Freeman
11

Sous Windows, vous pouvez utiliser

C:>dir /b /s java.exe

pour imprimer le chemin d'accès complet de chaque "java.exe" sur votre lecteur C:, qu'ils se trouvent sur votre variable d'environnement PATH ou non.

Thomas Bender
la source
10

Plus d'informations sur Windows ... la variable java.home n'est pas toujours au même emplacement que le binaire exécuté.

Comme le dit Denis The Menace, le programme d'installation place les fichiers Java dans Program Files , mais aussi java.exe dans System32 . Avec rien de Java lié sur le chemin java -version peut toujours fonctionner. Cependant, lorsque le programme de PeterMmm est exécuté, il signale la valeur de Program Files en tant que java.home , ce n'est pas faux (Java y est installé) mais le binaire en cours d'exécution se trouve dans System32 .

Une façon de rechercher l'emplacement du binaire java.exe , ajoutez la ligne suivante au code de PeterMmm pour que le programme continue de fonctionner un peu plus longtemps:

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

Compilez-le et exécutez-le, puis recherchez l'emplacement de l' image java.exe . Par exemple, dans Windows 7, ouvrez le gestionnaire de tâches, recherchez l' entrée java.exe , faites un clic droit et sélectionnez «ouvrir l'emplacement du fichier», cela ouvre l'emplacement exact du binaire Java. Dans ce cas, ce serait System32 .

Moika tourne
la source
9

Exécutez ce programme à partir de la ligne de commande:

// 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
la source
4
n'aurait-elle pas à le compiler en premier?
Irwin
2
Cela trouvera un JRE s'il est installé et sur le chemin en premier.
Jon Strayer
9

Doublure Powershell One:

$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
majkinetor
la source
1
Pour utilisation JDK 11$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Diomidis Spinellis
6

Avez-vous essayé de regarder votre variable% PATH%. C'est ce que Windows utilise pour trouver un exécutable.

sblundy
la source
Oui. Echo %PATH%. Le mien semble être sous c:\Program Files\JavaWindows 7
Mark Irvin
5

setExécutez simplement la commande dans votre ligne de commande. Ensuite, vous voyez toutes les variables d'environnement que vous avez définies.

Ou si sous Unix vous pouvez le simplifier:

$ set | grep "JAVA_HOME" 

la source
Merci Roflcoptr, il était en effet utile de se renseigner sur «set». Dans mon système, son affiche deux entrées pour la même variable, comment puis-je supprimer la mauvaise.
Ashine
3

Ceci est spécifique au système d'exploitation. Sous Unix:

which java

affichera le chemin vers l'exécutable. Je ne connais pas d'équivalent Windows, mais là, vous avez généralement le bindossier de l'installation JDK dans le système PATH:

echo %PATH%
Michael Borgwardt
la source
J'allais aussi donner cette réponse, mais il cherche clairement une réponse Windows.
Don Branson
@DonBranson Il a changé le texte pour inclure Windows après la publication de ce message.
EntangledLoops
2

Aucune de ces réponses n'est correcte pour Linux si vous recherchez la maison qui inclut les sous-répertoires tels que: bin, docs, include, jre, lib, etc.

Sur Ubuntu pour openjdk1.8.0, c'est dans: /usr/lib/jvm/java-1.8.0-openjdk-amd64

et vous préférerez peut-être l'utiliser JAVA_HOMEcar vous pourrez trouver des en-têtes si vous créez des fichiers source JNI. Bien qu'il soit vrai which javafournira le chemin binaire, ce n'est pas le vrai home JDK.

EntangledLoops
la source
1

Sur macOS, exécutez:

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

Sur ma machine, cela imprime:

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

Notez que l'exécution which javan'affiche pas l'emplacement du JDK, car la javacommande fait plutôt partie de JavaVM.framework, ce qui enveloppe le vrai 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
jameshfisher
la source
0

dans Windows cmd:

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

Pour les fenêtres:

@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

Ce lien pourrait aider à expliquer comment trouver un exécutable java à partir de bash: http://srcode.org/2014/05/07/detect-java-executable/

Qian Chen
la source
1
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change.
Shaiful Islam
1
Merci @ShaifulIslam, vous avez raison. J'ai ajouté le code du lien.
Qian Chen
0

J'ai amélioré la réponse de munsingh ci-dessus en testant la clé de registre dans les registres 64 bits et 32 ​​bits, si nécessaire:

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

référence pour l'accès au registre 64 bits

JohnP2
la source
0

Script pour Windows 32/64 bits.

@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
la source