Windows ignore JAVA_HOME: comment définir JDK par défaut?

89

Comment persuader Windows d'utiliser le JDK au lieu d'un JRE?

Cette question a été posée avant, ici et ailleurs:

Comment définir l'installation / l'exécution par défaut de Java (Windows)?

Le problème est que Windows ignore JAVA_HOMEet ignore également le fait que j'ai fait du répertoire bin JDK la première entrée du chemin.

Lorsque je lance à java -versionpartir de la ligne de commande, au lieu d'appeler mon installation JDK 1.6, il exécute le 1.7 JRE.

Je suppose que c'est un problème spécifique à 1.7 et que Windows 7 fait quelque chose qu'il ne devrait pas faire avec le registre.

Des idées pour résoudre le problème?

Edit : Oups. J'ai écrit "première entrée dans le classpath" ci-dessus, alors que je voulais dire "chemin". Pardon.

ccleve
la source

Réponses:

132

Sous Windows, l' javaexécutable utilise le registre Windows pour localiser la version par défaut de Java à exécuter.

La copie de java.exeà exécuter est trouvée à l'aide de la PATHvariable d'environnement. À moins que vous ne preniez des mesures pour changer cela, par défaut, une copie sera trouvée dans le répertoire Windows. Étant donné que cette copie n'est pas dans un répertoire d'exécution Java, elle en localise un en consultant le registre.

Vous devez donc soit modifier le registre, soit placer la version de Java souhaitée avant le répertoire Windows dans votre fichier PATH.

Erickson
la source
11
OP ici. Voir ma modification ci-dessus. Ouais, cela l'a résolu. Deux remarques: tout d'abord, il semble que l'installateur Java a vraiment mis java.exe dans Windows \ System32. C'est stupéfiant pour moi. Deuxièmement, lorsque vous modifiez le chemin d'accès sous Ordinateur / Propriétés / Paramètres système avancés / Variables d'environnement, vous devez modifier le chemin système et non le chemin utilisateur . Le chemin du système se place en premier.
ccleve
2
Je soulignerai également le point de user237815 selon lequel il semble que le programme d'installation de Java supprime son java.exe dans Windows \ System32. Ce n'était certainement pas intuitif pour moi. Ce n'est qu'après avoir vérifié la "version java" à partir d'une console que j'ai obtenu le niveau de confort que Windows utilisait maintenant avec le java.exe que je voulais de mon installation JDK plutôt qu'une version précédente et indésirable.
John Tobler
17
Le problème a également été résolu dans mon cas en renommant java.exe, javaw.exe et javaws.exe dans mon dossier Windows / System32. Ensuite, et seulement alors, java -version affiche la version définie dans JAVA_HOME et le PATH
Inversus
6
Tu as sauvé ma journée! Le déplacement de l'entrée liée au JDK avant Windows dans PATH a résolu le problème. Merci beaucoup!
the_dark_destructor
9
Je mets %JAVA_HOME%\binen première position de pathvariable sur Windows 10 et travaille pour moi.
Wendel
30

Dans Windows 8, vous souhaiterez peut-être supprimer le C:\ProgramData\Oracle\Java\javapath répertoire.

du chemin

Cela a résolu mon problème.

Arun
la source
5
Dans Windows 10, son: C: \ Program Files (x86) \ Common Files \ Oracle \ Java \ javapath. Cela est automatiquement ajouté à la variable de chemin système. Supprimez-le et définissez votre emplacement de chemin personnalisé.
Dexter
1
le commentaire ci-dessus a aidé dans le cas de Windows 10
Saba Ahang
23

J'ai ce problème aussi. J'utilise la version 1.6 mais je souhaite créer le code sur lequel je travaille avec la version 1.5. J'ai changé le JAVA_HOMEet PATH(utilisateur et système) en vain.

La réponse est que le programme d' installation de 1,6 a chuté java.exe, javaw.exeet javaws.exedans mon Windows\System32dossier (Windows 7).

Je l' ai résolu en renommant les fichiers java_wrong.exe, javaw_wrong.exeet javaws_wrong.exe. Ce n'est qu'après avoir fait cela qu'il récupère la version correcte de java telle que définie dans JAVA_HOMEet PATH. J'ai renommé les fichiers ainsi parce que cela les a supprimés d'une manière facilement réversible.

J'espère que cela t'aides!

Inversus
la source
10
Au lieu de renommer, vous pouvez modifier la variable PATH en spécifiant comme première valeur% JAVA_HOME% \ bin, de cette façon ce serait la première valeur qu'elle prendra
maxivis
1
@maxivis Merci. Je suppose que le problème pourrait avoir été l'ordre des éléments PATH de telle sorte que Windows \ System32 était avant JAVA_HOME. Je les ai simplement renommés pour qu'ils soient effectivement supprimés de manière réversible.
Inversus
En quelque sorte, définir JAVA_HOME dans le chemin ne fonctionnait en aucun cas pour moi, celui-ci l'a résolu.
Guilherme Orioli
12

Windows n'ignore rien. C'est un problème avec votre configuration; Windows utilise simplement ce que vous fournissez. Il n'a aucune connaissance particulière de JAVA_HOME.

CLASSPATHn'a rien à voir avec Windows non plus. Pour Windows, ce n'est qu'une variable d'environnement qui est étendue à un emplacement de dossier.

Vérifiez votre %PATH%variable environnementale. C'est ce qui fait que Windows trouve l'un avant l'autre. Le chemin (comme l'a dit le post auquel vous avez lié) doit pointer %JAVA_HOME%\bin;<remainder of path>. Encore une fois, la publication que vous avez liée vous a donné un moyen de définir cela à l'aide d'un fichier de commandes.

(Pour ceux qui ne le savent peut-être pas: le moyen le plus simple d'inspecter le% PATH% consiste à ouvrir une invite de commande et à taper echo %PATH%. Vous pouvez également y accéder en cliquant avec le bouton droit sur Computerdans le volet droit du menu Démarrer et en choisissant Properties, puis Advanced System Settings, et le Environmental Variablesbouton tne .)

Ken White
la source
@erickson: OK. Merci - je vais corriger cela. Cependant, cela n'a toujours rien à voir avec Windows, ce qui était le but de ma réponse. :)
Ken White
Compris, je craignais simplement qu'une nouvelle idée fausse puisse être créée; Java n'en sait rien de plus JAVA_HOMEque Windows.
erickson
J'apprécie la correction. Je ne suis pas une personne Java moi-même (expérience limitée à ce jour), il est donc bon de le savoir pour référence future.
Ken White
1
JAVA_HOMEdoit être défini sur la racine de l'installation java. Le chemin devrait avoir %JAVA_HOME%\bin;&lt;remainder of path%gt;, sinon vous finirez par ne pas "trouver" java, javac, etc. Bien sûr, Windows ne regarde vraiment que la PATHvariable, mais certains outils liés à java le regardent à l' JAVA_HOMEoccasion.
Edwin Buck
@Edwin: Correction des disparus \binégalement. Merci.
Ken White
6

J'ai eu le même problème. J'ai un tas de versions de Java installées et pour une raison quelconque, Java 1.7 était utilisé à la place de Java 1.6, même si j'ai spécifié dans le chemin pour utiliser 1.6 (C: \ jdk1.6.0_45_32 \ bin).

J'ai dû déplacer le chemin du JDK que je voulais utiliser (1.6) pour être la première entrée dans la variable d'environnement PATH pour m'assurer que Windows utilise 1.6 au lieu de 1.7.

Ainsi, par exemple, la variable d'environnement PATH avant était:

C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin;C:\jdk1.6.0_45_32\bin

et après avoir déplacé le jdk pour être le premier, cela a fonctionné:

C:\jdk1.6.0_45_32\bin;C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin

Je suppose que l'installateur Windows de Java 1.7 l'a installé dans un autre répertoire déjà dans le PATH, s'utilisant ainsi en premier au lieu de l'entrée PATH personnalisée spécifiée C: \ jdk1.6.0_45_32 \ bin;

eternalminerals.com
la source
Merci mon ami. Déplacer JAVA_HOME \ bin path comme premier élément de la variable Path m'a sauvé la vie.
ÖMER TAŞCI
4

Pour mon cas en 'Path'variable, un paramètre a été ajouté comme « C:\ProgramData\Oracle\Java\javapath;». Cet emplacement avait java.exe, javaw.exeet javaws.exede java 8 qui est nouvellement installé via jdk.exeOracle.

J'ai supprimé ce texte du chemin où mon chemin le contenait déjà %JAVA_HOME%\bin.

Maintenant, la variable 'JAVA_HOME'contrôle ma version Java que je voulais.

Muhammadh Aadhil
la source
4

entrez la description de l'image iciSupposons que vous ayez installé JDK 10 après JDK 8 et dans le chemin de jeu de variables d'environnement système comme "C: \ ProgramData \ Oracle \ Java \ javapath" puis le contrôle de version Java par ce chemin. il ignorera JAVA_HOME même le chemin jdk 1.8 défini ici. Supprimez donc "C: \ ProgramData \ Oracle \ Java \ javapath" dans le chemin pour obtenir l'effet du chemin JAVA_HOME

Samir 007
la source
2

J'ai installé Java 7 et 8 et je veux rediriger vers java 7 mais la version java dans ma fenêtre d'invite cmd montre Java 8.
Ajout du chemin du répertoire de Java 7 bin ( C: \ Program Files \ Java \ jdk1.7.0_10 \ bin ) à la variable PATH à la fin, mais n'a pas fonctionné et montre Java 8. J'ai donc changé le chemin Java 7 au début de la valeur du chemin et cela a fonctionné.
J'ai ouvert une nouvelle fenêtre d'invite cmd et vérifié ma version java et maintenant il montre Java 7

homme
la source
1

Définissez la variable d'environnement Path sur le répertoire jdk / bin souhaité

David Levin
la source
1

Dans mon cas, j'ai installé Java 7 et 8 (tous deux x64) et je souhaite rediriger vers java 7 mais tout est configuré pour utiliser Java 8. Java utilise la variable d'environnement PATH:

C: \ ProgramData \ Oracle \ Java \ javapath

comme première option pour rechercher son dossier d'exécution (est un dossier caché). Ce chemin contient 3 liens symboliques qui ne peuvent pas être modifiés.

Dans mon PC, la variable d'environnement PATH ressemble à ceci:

C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

Dans mon cas, cela devrait ressembler à ceci:

C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

J'ai dû couper et coller les liens symboliques ailleurs pour que java ne puisse pas les trouver, et je peux les restaurer plus tard.

Après avoir défini les variables d'environnement JAVA_HOME et JRE_HOME sur les environnements d'exécution des dossiers java souhaités (dans mon cas, il s'agit de Java 7), la commande java -versiondevrait afficher votre environnement d' exécution Java souhaité. Je remarque qu'il n'est pas nécessaire de jouer avec le registre.

Testé sur Win7 x64.

Fenêtre cassé
la source
1

Ce problème est probablement dû aux versions antérieures de Java installées sur votre système. Vérifiez d'abord attentivement vos variables d'environnement et supprimez toutes les variables d'environnement liées aux versions précédentes de JAVA et remplacez

C:\Program Files\Java\<your new jdk version>\bin
Tanay Toshniwal
la source
0

Il y a un facteur supplémentaire ici; en plus des exécutables java que l'installation java place partout où vous lui demandez de les placer, sur windows, le programme d'installation java place également des copies de certains de ces exécutables dans votre répertoire windows system32, donc vous utiliserez probablement quel exécutable java était installé le plus récemment.

Ben Brammer
la source
0

Juste au cas où vous utilisez un fichier .BAT comme service Windows, je vous suggère de désinstaller le service Windows et de le réinstaller après avoir changé le% JAVA_HOME% pour qu'il pointe vers la bonne version de Java.

Aurun
la source
0

Après avoir lutté avec ce problème pendant un certain temps et fait des recherches à ce sujet, j'ai finalement réussi à le résoudre en suivant ces étapes:

1) installez la version 12 de jdk
2) Créez une nouvelle variable dans la variable système
3) Nommez-la JAVA_HOME et indiquez le chemin d'installation de jdk
4) ajoutez cette variable dans le chemin et déplacez-la vers le haut.
5) allez dans C: \ Program Files (86) \ Common Files \ Oracle \ Java \ javapath et remplacez java.exe et javaw.exe par les fichiers correspondants avec les mêmes noms du dossier pathtojavajdk / bin

Enfin, j'ai vérifié la version par défaut de java dans cmd avec "java -version" et cela a fonctionné!

Rodrigo Araujo
la source