javac n'est pas reconnu comme une commande interne ou externe, un programme exploitable ou un fichier de commandes [fermé]


253

Je rencontre une erreur en essayant de compiler des programmes Java.

Je suis sous Windows (il s'agit d'un problème spécifique à Windows) et j'ai le dernier JDK installé.

J'ai tenté une solution impliquant la PATHvariable, mais l'erreur persiste.

Sortie console:

C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin
C:\>javac Hello.java
'javac' is not recognized as an internal or external command,
operable program or batch file.

7
je pense que votre chemin n'est pas défini. aller à votre variable environnementale et définir leur chemin
Ron

2
Cette question semble être hors sujet car elle est facilement trouvable dans les instructions d'installation de JDK et la réponse y est à jour et de meilleure qualité que n'importe quelle réponse ici. Il est également facilement disponible, pour toutes les plateformes, dans le premier chapitre du didacticiel de démarrage officiel .
Jason C

8
Ta pour l'information Jason C. Mais j'avoue que je trouve que la décision d'appeler ce fil hors sujet semble être en désaccord avec le nombre d'autres qui ont augmenté cette réponse. Comme je suis sur le point de le faire.
Matt Stevens


L'ajout d'une nouvelle variable est plus facile et une fois que vous avez créé une nouvelle variable "PATH", assurez-vous d'ajouter un point-virgule (;) et la fin de la valeur.
Amir Md Amiruzzaman

Réponses:


434

TL; DR

Pour les lecteurs expérimentés:

  1. Trouvez le chemin Java; cela ressemble à ceci:C:\Program Files\Java\jdkxxxx\bin\
  2. Recherche dans le menu Démarrer de "variable d'environnement" pour ouvrir la boîte de dialogue des options.
  3. Examinez PATH. Supprimez les anciens chemins Java.
  4. Ajoutez le nouveau chemin Java à PATH.
  5. Modifier JAVA_HOME.
  6. Fermez et rouvrez la console / IDE.

Bienvenue!

Vous avez rencontré l'un des problèmes techniques les plus notoires auxquels sont confrontés les débutants Java: le 'xyz' is not recognized as an internal or external command...message d'erreur.

En un mot, vous n'avez pas installé Java correctement . La finalisation de l'installation de Java sur Windows nécessite quelques étapes manuelles. Vous devez toujours effectuer ces étapes après l'installation de Java, y compris après la mise à niveau du JDK.

Variables d'environnement et PATH

(Si vous comprenez déjà cela, n'hésitez pas à ignorer les trois sections suivantes.)

Lorsque vous exécutez javac HelloWorld.java, cmd doit déterminer où javac.exese trouve. Ceci est accompli avec PATHune variable d'environnement.

Une variable d'environnement est une paire clé-valeur spéciale (par exemple windir=C:\WINDOWS). La plupart sont fournis avec le système d'exploitation, et certains sont nécessaires au bon fonctionnement du système. Une liste d'entre eux est transmise à chaque programme (y compris cmd) au démarrage. Sous Windows , il existe deux types : les variables d'environnement utilisateur et les variables d'environnement système .

Vous pouvez voir vos variables d'environnement comme ceci:

C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\craig\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
...

La variable la plus importante est PATH. Il s'agit d'une liste de chemins, séparés par ;. Lorsqu'une commande est entrée dans cmd, chaque répertoire de la liste sera analysé pour un exécutable correspondant.

Sur mon ordinateur, PATHc'est:

C:\>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPower
Shell\v1.0\;C:\ProgramData\Microsoft\Windows\Start Menu\Programs;C:\Users\craig\AppData\
Roaming\Microsoft\Windows\Start Menu\Programs;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\
msys64\mingw32\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Users\
craig\AppData\Local\Yarn\bin;C:\Program Files\Java\jdk-10.0.2\bin;C:\ProgramFiles\Git\cmd;
C:\Program Files\Oracle\VirtualBox;C:\Program Files\7-Zip\;C:\Program Files\PuTTY\;C:\
Program Files\launch4j;C:\Program Files (x86)\NSIS\Bin;C:\Program Files (x86)\Common Files
\Adobe\AGL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\iCLS Client\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
(x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\iCLS
Client\;C:\Users\craig\AppData\Local\Microsoft\WindowsApps

Lorsque vous exécutez javac HelloWorld.java, cmd, après avoir réalisé qu'il javacne s'agit pas d'une commande interne , recherche le système PATHsuivi par l'utilisateurPATH . Il pénètre mécaniquement tous les répertoires dans la liste, et vérifie si javac.com, javac.exe, javac.bat, etc. est présent. Quand il trouve javac, il l'exécute. Sinon, il imprime'javac' is not recognized as an internal or external command, operable program or batch file.

Vous devez ajouter le répertoire des exécutables Java à PATH.

JDK contre JRE

(Si vous comprenez déjà cela, n'hésitez pas à ignorer cette section.)

Lors du téléchargement de Java, vous avez le choix entre:

  • L' environnement d'exécution Java (JRE), qui comprend les outils nécessaires pour exécuter des programmes Java, mais pas pour en compiler de nouveaux - il en contient javamais pas javac.
  • Le kit de développement Java (JDK), qui contient les deux javaet javac, avec une foule d'autres outils de développement. Le JDK est un sur-ensemble du JRE.

Vous devez vous assurer que vous avez installé le JDK . Si vous n'avez installé que le JRE, vous ne pouvez pas l'exécuter javaccar vous n'avez pas d'installation du compilateur Java sur votre disque dur. Vérifiez votre liste de programmes Windows et assurez-vous que le nom du package Java contient les mots "Kit de développement".

Ne pas utiliser set

(Si vous n'en aviez pas l'intention de toute façon, n'hésitez pas à sauter cette section.)

Plusieurs autres réponses recommandent d'exécuter une variation de:

C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin

Ne faites pas cela. Il y a plusieurs problèmes majeurs avec cette commande:

  1. Cette commande efface tout le reste de PATHet remplace par le chemin Java. Après avoir exécuté cette commande, il se peut que diverses autres commandes ne fonctionnent pas.
  2. Votre chemin Java n'est probablement pas C:\Program Files\Java\jdk1.7.0_09\bin - vous avez presque certainement une version plus récente du JDK, qui aurait un chemin différent.
  3. La nouvelle PATH s'applique uniquement à la session cmd actuelle. Vous devrez ressaisir la setcommande chaque fois que vous ouvrirez l'invite de commande.

Les points # 1 et # 2 peuvent être résolus avec cette version légèrement meilleure:

C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%

Mais c'est juste une mauvaise idée en général.

Trouver le chemin Java

La bonne façon commence par trouver où vous avez installé Java. Cela dépend de la façon dont vous avez installé Java.

Installateur Exe

Vous avez installé Java en exécutant un programme d'installation. Le programme d'installation d'Oracle place les versions de Java sous C:\Program Files\Java\(ou C:\Program Files (x86)\Java\). Avec l'Explorateur de fichiers ou l'invite de commandes, accédez à ce répertoire.

Chaque sous-dossier représente une version de Java. S'il n'y en a qu'un, vous l'avez trouvé. Sinon, choisissez celui qui ressemble à la version la plus récente. Assurez-vous que le nom du dossier commence par jdk(par opposition à jre). Entrez dans le répertoire.

Entrez ensuite dans le binrépertoire de cela.

Vous êtes maintenant dans le bon répertoire. Copiez le chemin. Si dans l'Explorateur de fichiers, cliquez sur la barre d'adresse. Si dans l'invite de commandes, copiez l'invite.

Le chemin Java résultant doit être sous la forme (sans guillemets):

C:\Program Files\Java\jdkxxxx\bin\

Fichier zip

Vous avez téléchargé un .zip contenant le JDK. Extrayez-le dans un endroit aléatoire où il ne vous gênera pas; C:\Java\est un choix acceptable.

Localisez ensuite le bindossier quelque part à l'intérieur.

Vous êtes maintenant dans le bon répertoire. Copiez son chemin. Ceci est le chemin Java.

N'oubliez pas de ne jamais déplacer le dossier, car cela invaliderait le chemin.

Ouvrez la boîte de dialogue des paramètres

C'est la boîte de dialogue à modifier PATH. Il existe de nombreuses façons d'accéder à cette boîte de dialogue, selon votre version de Windows, les paramètres de l'interface utilisateur et la façon dont la configuration de votre système est perturbée.

Essayez certains d'entre eux:

  • Menu Démarrer / zone de recherche de la barre des tâches »recherche de" variable d'environnement "
  • Win + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe» Variables d'environnement
  • Explorateur de fichiers »tapez dans la barre d'adresse Control Panel\System and Security\System» Paramètres système avancés (à l'extrême gauche, dans la barre latérale) »Variables d'environnement
  • Bureau »cliquez avec le bouton droit sur ce PC» Propriétés »Paramètres système avancés» Variables d'environnement
  • Menu Démarrer »cliquez avec le bouton droit sur l'ordinateur» Propriétés »Paramètres système avancés» Variables d'environnement
  • Panneau de configuration (mode icône) »Système» Paramètres système avancés »Variables d'environnement
  • Panneau de configuration (mode catégorie) »Système et sécurité» Système »Paramètres système avancés» Variables d'environnement
  • Bureau »cliquez avec le bouton droit sur Poste de travail» Avancé »Variables d'environnement
  • Panneau de configuration »Système» Avancé »Variables d'environnement

N'importe lequel de ces éléments devrait vous amener à la bonne boîte de dialogue des paramètres.

Si vous utilisez Windows 10, Microsoft vous a béni avec une nouvelle interface utilisateur sophistiquée à modifier PATH. Sinon, vous verrez PATHdans toute sa gloire incrustée de points-virgules, enfoncée dans une zone de texte sur une seule ligne. Faites de votre mieux pour apporter les modifications nécessaires sans casser votre système.

Nettoyer PATH

Regardez PATH. Vous avez presque certainement deux PATHvariables (en raison des variables d'environnement utilisateur / système). Vous devez les regarder tous les deux.

Recherchez d' autres chemins Java et supprimez-les. Leur existence peut provoquer toutes sortes de conflits. (Par exemple, si vous avez JRE 8 et JDK 11 dans PATH, dans cet ordre, alors javacinvoquera le compilateur Java 11, qui créera les .classfichiers de la version 55 , mais javainvoquera la JVM Java 8, qui ne prend en charge que jusqu'à la version 52, et vous rencontrerez des erreurs de version non prises en charge et vous ne pourrez pas compiler et exécuter aucun programme.) Contournez ces problèmes en vous assurant que vous n'avez qu'un seul chemin Java PATH. Et pendant que vous y êtes, vous pouvez également désinstaller les anciennes versions de Java . Et n'oubliez pas que vous n'avez pas besoin d'avoir à la fois un JDK et un JRE.

Si c'est le cas C:\ProgramData\Oracle\Java\javapath, supprimez-le également . Oracle avait l'intention de résoudre le problème de rupture des chemins Java après les mises à niveau en créant un lien symbolique qui pointerait toujours vers la dernière installation Java. Malheureusement, il finit souvent par pointer vers le mauvais emplacement ou ne fonctionne tout simplement pas . Il est préférable de supprimer cette entrée et de gérer manuellement le chemin Java.

Maintenant, c'est aussi une bonne occasion d'effectuer des tâches ménagères générales PATH. Si vous avez des chemins relatifs aux logiciels qui ne sont plus installés sur votre PC, vous pouvez les supprimer. Vous pouvez également mélanger l'ordre des chemins (si vous vous souciez de choses comme ça).

Ajouter à PATH

Maintenant, prenez le chemin Java que vous avez trouvé il y a trois étapes et placez-le dans le système PATH.

Peu importe où dans la liste va votre nouveau chemin; le placer à la fin est un bon choix.

Si vous utilisez l'interface utilisateur antérieure à Windows 10, assurez-vous d'avoir correctement placé les points-virgules. Il devrait y avoir exactement un séparant chaque chemin dans la liste.

Il n'y a vraiment rien d'autre à dire ici. Ajoutez simplement le chemin d'accès à PATHet cliquez sur OK.

Ensemble JAVA_HOME

Pendant que vous y êtes, vous pouvez aussi bien vous préparer JAVA_HOME. Il s'agit d'une autre variable d'environnement qui doit également contenir le chemin Java. De nombreux programmes Java et non Java, y compris les systèmes de construction Java populaires Maven et Gradle , génèrent des erreurs s'ils ne sont pas correctement définis.

S'il JAVA_HOMEn'existe pas, créez-le en tant que nouvelle variable d'environnement système. Réglez-le sur le chemin du répertoire Java sans le bin/répertoire, c'est-à-dire C:\Program Files\Java\jdkxxxx\.

N'oubliez pas de modifier également JAVA_HOMEaprès la mise à niveau de Java.

Fermer et rouvrir l'invite de commandes

Bien que vous ayez modifié PATH, tous les programmes en cours d'exécution, y compris cmd, ne voient que l'ancien PATH. En effet, la liste de toutes les variables d'environnement n'est copiée dans un programme qu'au début de son exécution; par la suite, il ne consulte que la copie mise en cache.

Il n'y a aucun bon moyen de rafraîchir les variables d'environnement de cmd , fermez simplement l'invite de commande et ouvrez-le à nouveau. Si vous utilisez un IDE, fermez-le et rouvrez-le également.

Voir également


7
Cela a fonctionné pour moi, mais avant j'avais essayé d'ajouter l'emplacement à la fin de la chaîne Path. Pourquoi ça marche seulement au début?
Eric H.

4
Merci! cela fonctionne pour moi! @Eric H: Ajouter à la fin fonctionne pour moi. D'après ce que je comprends, il passe par le chemin de gauche à droite et cherche javac.exe. Alors peut-être que vous l'avez dans un répertoire à l'avant et que javac.exe ne fonctionne pas.
Dao Lam

36
+1 pour fermer la ligne de commande puis la rouvrir, cela a fonctionné pour moi!
Sameh Deabes

Est-ce que cela a du sens si j'ai une version différente de jdk et jre sur mon ordinateur?
Aaron Liu

J'ai appris beaucoup de choses sur le système d'exploitation en configurant ces variables et tout ça. merci l'homme
Aniket Jadhav

77

essayez ceci .. je l'ai eu aussi mais maintenant il a résolu dans XP ..

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java

45

Vous avez mal saisi la setcommande - vous avez manqué la barre oblique inverse après C:. Ça devrait être:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin

1
J'ai raté ce droit, mais c'était mon erreur typographique lors de la publication de ma préoccupation ici. Je l'ai vérifié et tout est correctement orthographié mais me donne toujours la même erreur.
user987137

1
@ user987137. De toute évidence, quelque chose est incorrect. Est-ce que JDK (attention - JDK pas JRE) est installé à l'emplacement spécifié - C:\Program Files (x86)\Java\jdk1.7.0? Si oui, que se passe-t-il si vous le faites cd C:\Program Files (x86)\Java\jdk1.7.0\binet ensuite javac -version?
Raghuram

3
J'ai eu la même erreur lors de la configuration de JDK sur Win XP même si j'avais le chemin d'accès correct défini. Fermer simplement l'invite de commande et l'ouvrir à nouveau l'a corrigé.
Chris J

@ChrisJ - En effet, la nouvelle invite de commande sera lancée dans une nouvelle session et chargera donc également les variables d'environnement mises à jour.
Cyclonecode

17

Exécutez ce qui suit à partir de l'invite de commande: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" ou set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

J'ai essayé cela et cela fonctionne bien.


thx, cela a fonctionné sur Windows
Csaba

Bonne réponse. A travaillé pour moi sur Windows 10
Roger

5

Si la commande java fonctionne et rencontre un problème avec javac. puis vérifiez d'abord dans le répertoire bin du jdk le fichier javac.exe est là ou non. Si le fichier javac.exe existe, définissez-le JAVA_HOMEcomme variable système.


3

Vérifiez vos variables d'environnement.

Dans mon cas, JAVA_HOME était défini dans les variables système ainsi que dans les variables de mon compte utilisateur et cette dernière était définie sur une mauvaise version de Java . J'ai également eu le même problème avec la variable Path.

Après avoir supprimé JAVA_HOME de mes variables de compte d'utilisateur et supprimé le mauvais chemin de la variable Path, cela a fonctionné correctement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.