web-dev-qa-db-fra.com

Modification de Java_Home dans CMD ne change temporairement pas le chemin temporairement dans Windows

J'ai défini Hava Java_HOME à JDK11 dans la variable d'environnement des utilisateurs et PATH contient %Java_HOME%/bin.

Maintenant, je veux passer à JDK8 temporairement dans la commande-invite (cmd) en modifiant Java_HOME à JDK8 mais cela ne change pas de valeur dans path ou Java -version ne change pas dans l'instance actuelle de cmd.

P.S.- J'ai supprimé C:\Data de programme\Oracle\Java .. fichiers à éviter toute confusion

2
the1derer

La raison en est que la référence variable dans PATH est développée au moment de l'affectation à PATH, les modifications ultérieures sont ignorées, la référence à la valeur d'origine est perdue. C'est comme faire une copie de la valeur de la variable, ne créant pas de référence à la variable.

set Java_HOME=C:\dir1
PATH=%Java_HOME%
set Java_HOME=C:\dir2
PATH

Cela produira C:\dir1 (valeur de Java_HOME au moment de la mission) et pas %Java_HOME%.

Vous avez besoin d'un script comme celui-ci pour appeler après une modification de Java_HOME:

PATH=%Java_HOME%;C:\Windows\system32;C:\Windows;...
0
RalfFriedl

Je sais que la réponse est un peu tard, mais l'acceptée n'a pas travaillé pour moi, j'ai donc changé le code et fini par la solution suivante qui a fonctionné pour moi:

@echo off
echo Setting Java_HOME
setx -m Java_HOME "C:\Java\jdk-1.7.0_80"
echo setting PATH
setx -m PATH "%Java_HOME%\bin;%PATH%"
echo Display Java version
Java -version

setx -m Modifie la variable System variable, mais si vous devez modifier la variable utilisateur, laissez simplement ce paramètre. Comme le script doit être exécuté avec des privilèges d'administrateur, j'ai enregistré le script sur le fichier% user_home% emplacement et créé un raccourci. Le raccourci peut être placé partout où vous le souhaitez. Une chose que vous devez changer aux propriétés du raccourci: Right-click the shortcut -> properties -> shortcut tab -> advanced -> run as administrator. Cette solution a fonctionné parfaitement pour moi.

0
Arthur Eirich