java -version et javac -version montrant différentes versions

J’ai java 7 et java 8 tous deux installés sur mon système Windows sous C:\Program Files\Java

Dans le cheminement de l’environnement, j’ai spécifié le chemin de java 7 comme ceci.

%JAVA_HOME%/binJAVA_HOME = C:\Program Files\Java\jdk1.7.0_17

Mais lorsque je tape javac -version il affiche javac 1.7.0_17 ce qui est logique

mais quand je fais java -version cela montre

 java version "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode) 

entrer la description de l'image ici

Toute idée de ce qui peut être le problème ici?

Editer le dossier installé: entrer la description de l'image ici

Et encore une chose echo %PATH% n’a qu’une occurrence de JDK qui est pour java 7 et aucune occurrence de JRE trouve.

Le problème se produit probablement parce que vous avez un JRE sur votre path , avant votre JDK . Cela se produit généralement lorsque nous ajoutons JDK dans le path sans supprimer les JRE ajoutés précédemment. Ainsi, lorsque vous faites java il pointe vers JRE et lorsque vous faites javac il pointe vers l’autre version / JDK (jre n’y ayant pas de javac)

Edit: – Depuis que vous avez édité votre question et que vous n’avez posté aucun JRE dans votre chemin, vous pouvez copier votre %JAVA_HOME% et le coller d’abord dans votre variable path (assurez-vous que son chemin avant system32 est déjà présent). installer Android SDK) et le faire a résolu.

A également trouvé une explication possible à partir d’ ici : –

JRE also puts a java.exe to c:\Windows\System32, that's how first command is resolved. Second command is resolved by the C:\Program Files\Java\jdk1.7.0_02\bin entry in your PATH variable. If (and when) you are developing from the command prompt, you have to adjust the PATH variable so that C:\Program Files\Java\jdk1.7.0_02\bin is before c:\Windows\System32.

Ok, comme vous avez dit que vous n’avez aucun JRE sur votre chemin, je suppose que where java (si vous avez Windows 7) vous donnera C:\Windows\System32\java.exe .

Changer le java cours d’exécution

Essayez d’utiliser la boîte de dialog Java-Settings à partir du panneau de configuration pour modifier la version du système Java actuellement active. Cela devrait changer la version java -version est de retour. Si cela ne fonctionne pas, vous devrez probablement réinstaller la version de Java sur laquelle vous voulez exécuter la commande java , spécifier le chemin explicitement, écrire votre propre wrapper (ce qui fonctionne si vous êtes dans le même répertoire que le wrapper) ou le placer le chemin JRE avant C:\Windows\System32\ sur votre chemin (je ne sais pas si la dernière option est vraiment bonne).

Un wrapper pourrait ressembler à ceci:

 @"C:\Program Files\Java\jre7\bin\java.exe" %* 

et vous pouvez soit le nommer java.bat (où il fonctionnera si vous êtes dans le même répertoire ou le placer dans PATH avant C:\Windows\System32\java.exe ou vous pouvez le nommer java7.bat et le placer n’importe où sur votre chemin pour pouvoir exécuter Java 7 JRE si vous le souhaitez.

Un wrapper est également une bonne option si vous souhaitez modifier JAVA_HOME lors de son exécution.

Changer le javac marche

Si vous souhaitez exécuter un autre javac appuyez sur Windows + Pause et ouvrez la boîte de dialog système pour modifier le PATH afin qu’il contienne le chemin d’access à votre JDK 8 au lieu de votre JDK 7. Vous devrez redémarrer votre ligne de commande pour les afficher.

Pour résoudre ce type de problème d’environnement, je crois toujours à la commande whereis, faire de même dans windows télécharger whereis.exe puis définir le chemin et exécuter la commande

où est java.exe

où est javac.exe

Vous trouverez facilement le chemin exact à partir duquel java est appelé dans l’environnement, ainsi que javac.

Je suppose que lorsque vous écrivez javac , vous obtenez la valeur de jre7 qui est actuellement utilisée par vous pour le développement et lorsque vous écrivez une java version , vous obtenez la valeur de la version du jre8 actuellement utilisée par le développeur. les applications installées sur votre système car votre JRE du système est mentionné avant le jre7 que vous utilisez pour le développement

Après avoir entré le programme ou effectué un appel système, le système recherche d’abord dans le répertoire en cours, puis dans PATH , en vérifiant chaque répertoire de gauche à droite sur un fichier exécutable correspondant à la commande. Lorsque le système localise le fichier exécutable, l’exécute (arrêt de la recherche).

Vous avez préinstallé le système JRE dans la variable d’environnement PATH avant le JRE dont vous avez besoin.

Oui, il est vrai que pour gérer les versions incompatibles, nous devons modifier la variable PATH, et la commande where (au moins sous Windows) est très utile pour savoir quel programme est sélectionné en premier. Il y a cependant une différence: quand vous regardez le contenu de votre y PATH var après avoir lancé, par exemple,

 echo %path% > path.txt 

Vous devez être conscient du fait que PATH est en fait composé de DEUX sections: l’une est System PATH et l’autre est Current User PATH , et c’est System Path qui est évalué en premier mais imprimé en dernier. Ainsi, placer simplement un chemin vers votre JDK, disons tout neuf, devant tout ce qui précède sera inutile tant qu’il y aura un autre endroit avec l’ancienne version quelque part dans le système PATH .

Ce problème particulier est particulièrement courant lorsque vous avez des entrées telles que

 C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath 

dans votre chemin système . Déplacez-les simplement à la fin de votre section Current User PATH pour que ces entrées soient les dernières de la queue de recherche.