javac wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt [geschlossen]

253

Beim Kompilieren von Java-Programmen tritt ein Fehler auf.

Ich bin unter Windows (dies ist ein Windows-spezifisches Problem) und ich habe das neueste JDK installiert.

Ich habe versucht, eine Lösung mit der PATHVariablen zu finden, aber der Fehler bleibt bestehen.

Konsolenausgabe:

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.
user987137
quelle
7
Ich denke, dein Weg ist nicht festgelegt. Gehen Sie zu Ihrer Umgebungsvariablen und legen Sie den Pfad fest
Ron
2
Diese Frage scheint nicht zum Thema zu gehören, da sie in den tatsächlichen JDK-Installationsanweisungen leicht zu finden ist und die Antwort dort aktuell und von höherer Qualität ist als jede Antwort hier. Es ist auch für alle Plattformen im ersten Kapitel des offiziellen Lernprogramms verfügbar .
Jason C
8
Ta für die Informationen Jason C. Aber ich gebe zu, ich finde, dass die Entscheidung, diesen Thread als Off-Topic zu bezeichnen, im Widerspruch zur Anzahl der anderen steht, die diese Antwort aufgegriffen haben. Wie ich gerade mache.
Matt Stevens
Das Hinzufügen einer neuen Variablen ist einfacher. Wenn Sie eine neue Variable "PATH" erstellt haben, müssen Sie das Semikolon (;) und das Ende des Werts hinzufügen.
Amir Md Amiruzzaman

Antworten:

434

TL; DR

Für erfahrene Leser:

  1. Suchen Sie den Java-Pfad. es sieht aus wie das:C:\Program Files\Java\jdkxxxx\bin\
  2. Startmenüsuche nach "Umgebungsvariable", um den Optionsdialog zu öffnen.
  3. Untersuche PATH. Entfernen Sie alte Java-Pfade.
  4. Fügen Sie den neuen Java-Pfad zu hinzu PATH.
  5. Bearbeiten JAVA_HOME .
  6. Schließen Sie die Konsole / IDE und öffnen Sie sie erneut.

Herzlich willkommen!

Sie sind auf eines der bekanntesten technischen Probleme gestoßen, mit denen Java-Anfänger konfrontiert sind: das 'xyz' is not recognized as an internal or external command... Fehlermeldung.

Kurz gesagt, Sie haben Java nicht richtig installiert . Das Abschließen der Installation von Java unter Windows erfordert einige manuelle Schritte. Sie müssen diese Schritte nach der Installation von Java immer ausführen, auch nach dem Upgrade des JDK.

Umgebungsvariablen und PATH

(Wenn Sie dies bereits verstehen, können Sie die nächsten drei Abschnitte überspringen.)

Beim Ausführen javac HelloWorld.javamuss cmd bestimmen, wo javac.exesich der Standort befindet. Dies wird mit PATHeiner Umgebungsvariablen erreicht.

Eine Umgebungsvariable ist ein spezielles Schlüssel-Wert-Paar (z windir=C:\WINDOWS. B. ). Die meisten wurden mit dem Betriebssystem geliefert, und einige sind für die ordnungsgemäße Funktion des Systems erforderlich. Eine Liste von ihnen wird beim Start an jedes Programm (einschließlich cmd) übergeben. Unter Windows gibt es zwei Typen : Benutzerumgebungsvariablen und Systemumgebungsvariablen .

Sie können Ihre Umgebungsvariablen folgendermaßen sehen:

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
...

Die wichtigste Variable ist PATH. Es ist eine Liste von Pfaden, die durch getrennt sind; . Wenn ein Befehl in cmd eingegeben wird, wird jedes Verzeichnis in der Liste nach einer passenden ausführbaren Datei durchsucht.

Auf meinem Computer PATHist:

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

Wenn Sie ausführen javac HelloWorld.java, durchsucht cmd das System, wenn der Benutzer feststellt, dass javaces sich nicht um einen internen Befehl handelt , gefolgt vom Benutzer . Er tritt mechanisch jedes Verzeichnis in der Liste, und prüft , ob , , etc. vorhanden ist. Wenn es findet , wird es ausgeführt. Wenn dies nicht der Fall ist, wird gedrucktPATHPATHjavac.comjavac.exejavac.batjavac'javac' is not recognized as an internal or external command, operable program or batch file.

Sie müssen das Verzeichnis der ausführbaren Java-Dateien hinzufügen PATH.

JDK gegen JRE

(Wenn Sie dies bereits verstehen, können Sie diesen Abschnitt überspringen.)

Beim Herunterladen von Java haben Sie die Wahl zwischen:

  • Die Java Runtime Environment (JRE), die die erforderlichen Tools zum Ausführen von Java-Programmen, aber nicht zum Kompilieren neuer Programme enthält - enthält, javaaber nichtjavac .
  • Das Java Development Kit (JDK), das sowohl javaals auch javaceine Vielzahl anderer Entwicklungstools enthält. Das JDK ist eine Obermenge der JRE.

Sie müssen sicherstellen, dass Sie das JDK installiert haben . Wenn Sie nur die JRE installiert haben, können Sie sie nicht ausführen, javacda der Java-Compiler nicht auf Ihrer Festplatte installiert ist. Überprüfen Sie die Liste Ihrer Windows-Programme und stellen Sie sicher, dass der Name des Java-Pakets die Wörter "Development Kit" enthält.

Nicht benutzen set

(Wenn Sie es sowieso nicht geplant haben, können Sie diesen Abschnitt überspringen.)

Einige andere Antworten empfehlen die Ausführung einer Variation von:

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

TU das nicht. Es gibt mehrere Hauptprobleme mit diesem Befehl:

  1. Dieser Befehl löscht alles andere aus PATHund ersetzt sie durch die Java - Pfad. Nach dem Ausführen dieses Befehls funktionieren möglicherweise verschiedene andere Befehle nicht.
  2. Ihr Java-Pfad ist wahrscheinlich nicht C:\Program Files\Java\jdk1.7.0_09\bin - Sie haben mit ziemlicher Sicherheit eine neuere Version des JDK, die einen anderen Pfad hätte.
  3. Das neue PATH gilt nur für die aktuelle cmd-Sitzung. Sie müssen den setBefehl jedes Mal neu eingeben, wenn Sie die Eingabeaufforderung öffnen.

Die Punkte 1 und 2 können mit dieser etwas besseren Version gelöst werden:

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

Aber im Allgemeinen ist es nur eine schlechte Idee.

Suchen Sie den Java-Pfad

Der richtige Weg beginnt damit, herauszufinden, wo Sie Java installiert haben. Das hängt davon ab, wie Sie Java installiert haben.

Exe Installer

Sie haben Java installiert, indem Sie ein Setup-Programm ausgeführt haben. Das Installationsprogramm von Oracle platziert Java-Versionen unter C:\Program Files\Java\(oder C:\Program Files (x86)\Java\). Navigieren Sie mit dem Datei-Explorer oder der Eingabeaufforderung zu diesem Verzeichnis.

Jeder Unterordner repräsentiert eine Version von Java. Wenn es nur einen gibt, haben Sie ihn gefunden. Andernfalls wählen Sie die Version, die der neueren Version ähnelt. Stellen Sie sicher, dass der Ordnername mit jdk(im Gegensatz zu jre) beginnt . Geben Sie das Verzeichnis ein.

Dann geben Sie das binVerzeichnis davon ein.

Sie befinden sich jetzt im richtigen Verzeichnis. Kopieren Sie den Pfad. Klicken Sie im Datei-Explorer auf die Adressleiste. Wenn Sie sich in der Eingabeaufforderung befinden, kopieren Sie die Eingabeaufforderung.

Der resultierende Java-Pfad sollte die Form (ohne Anführungszeichen) haben:

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

Zip-Datei

Sie haben eine ZIP-Datei mit dem JDK heruntergeladen. Extrahieren Sie es an einen zufälligen Ort, an dem es Ihnen nicht im Weg steht. C:\Java\ist eine akzeptable Wahl.

Suchen Sie dann den binOrdner irgendwo darin.

Sie befinden sich jetzt im richtigen Verzeichnis. Kopieren Sie den Pfad. Dies ist der Java-Pfad.

Denken Sie daran, den Ordner niemals zu verschieben, da dies den Pfad ungültig machen würde.

Öffnen Sie den Einstellungsdialog

Das ist der zu bearbeitende Dialog PATH. Abhängig von Ihrer Windows-Version, den Einstellungen der Benutzeroberfläche und dem Durcheinander Ihrer Systemkonfiguration gibt es zahlreiche Möglichkeiten, zu diesem Dialogfeld zu gelangen.

Probieren Sie einige davon aus:

  • Suchfeld Startmenü / Taskleiste »Suche nach" Umgebungsvariable "
  • Win + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe» Umgebungsvariablen
  • Datei-Explorer »Geben Sie in die Adressleiste ein Control Panel\System and Security\System » Erweiterte Systemeinstellungen (ganz links in der Seitenleiste) »Umgebungsvariablen
  • Desktop »Klicken Sie mit der rechten Maustaste auf Diesen PC» Eigenschaften »Erweiterte Systemeinstellungen» Umgebungsvariablen
  • Startmenü »Klicken Sie mit der rechten Maustaste auf Computer» Eigenschaften »Erweiterte Systemeinstellungen» Umgebungsvariablen
  • Systemsteuerung (Symbolmodus) »System» Erweiterte Systemeinstellungen »Umgebungsvariablen
  • Systemsteuerung (Kategoriemodus) »System und Sicherheit» System »Erweiterte Systemeinstellungen» Umgebungsvariablen
  • Desktop »Klicken Sie mit der rechten Maustaste auf Arbeitsplatz» Erweitert »Umgebungsvariablen
  • Systemsteuerung »System» Erweitert »Umgebungsvariablen

Diese sollten Sie zum richtigen Einstellungsdialog führen.

Wenn Sie unter Windows 10 arbeiten, hat Microsoft Sie mit einer schicken neuen Benutzeroberfläche zum Bearbeiten gesegnet PATH. Andernfalls sehen Sie PATHin seiner vollen, mit Semikolons verkrusteten Pracht, die in einem einzeiligen Textfeld zusammengefasst ist. Geben Sie Ihr Bestes, um die erforderlichen Änderungen vorzunehmen, ohne Ihr System zu beschädigen.

Reinigen PATH

Schau dir an PATH. Sie haben fast definitiv zwei PATHVariablen (aufgrund von Benutzer- und Systemumgebungsvariablen). Sie müssen sich beide ansehen.

Suchen Sie nach anderen Java-Pfaden und entfernen Sie diese. Ihre Existenz kann alle möglichen Konflikte verursachen. (Wenn Sie beispielsweise JRE 8 und JDK 11 in PATHdieser Reihenfolge haben, javacwird der Java 11-Compiler aufgerufen, der .classDateien der Version 55 erstellt , aber javadie Java 8-JVM, die nur bis zur Version 52 unterstützt, und Es treten nicht unterstützte Versionsfehler auf und Sie können keine Programme kompilieren und ausführen.) Umgehen Sie diese Probleme, indem Sie sicherstellen, dass Sie nur einen Java-Pfad haben PATH. Und wenn Sie schon dabei sind, können Sie auch alte Java-Versionen deinstallieren . Und denken Sie daran, dass Sie nicht sowohl ein JDK als auch ein JRE benötigen .

Wenn ja C:\ProgramData\Oracle\Java\javapath, entfernen Sie das ebenfalls . Oracle wollte das Problem lösen, dass Java-Pfade nach Upgrades unterbrochen werden, indem ein symbolischer Link erstellt wurde , der immer auf die neueste Java-Installation verweist. Leider zeigt es oft auf den falschen Ort oder funktioniert einfach nicht . Es ist besser, diesen Eintrag zu entfernen und den Java-Pfad manuell zu verwalten.

Jetzt ist auch eine gute Gelegenheit, eine allgemeine Haushaltsführung durchzuführen PATH. Wenn auf Ihrem PC keine Softwarepfade mehr installiert sind, können Sie diese entfernen. Sie können auch die Reihenfolge der Pfade mischen (wenn Sie sich für solche Dinge interessieren).

Hinzufügen PATH

Nehmen Sie nun den Java-Pfad, den Sie vor drei Schritten gefunden haben, und platzieren Sie ihn im System PATH.

Es sollte keine Rolle spielen, wohin in der Liste Ihr neuer Pfad führt. es am Ende zu platzieren ist eine gute Wahl.

Wenn Sie die Benutzeroberfläche vor Windows 10 verwenden, stellen Sie sicher, dass Sie die Semikolons korrekt platziert haben. Es sollte genau einen geben, der jeden Pfad in der Liste trennt.

Hier gibt es wirklich nicht viel zu sagen. Fügen Sie einfach den Pfad hinzu PATHund klicken Sie auf OK.

einstellen JAVA_HOME

Wenn Sie schon dabei sind, können Sie auch einstellen JAVA_HOME. Dies ist eine weitere Umgebungsvariable, die auch den Java-Pfad enthalten sollte. Viele Java- und Nicht-Java-Programme, einschließlich der beliebten Java-Build-Systeme Maven und Gradle , werfen Fehler aus, wenn sie nicht richtig eingestellt sind.

Wenn JAVA_HOMEnicht vorhanden, erstellen Sie es als neue Systemumgebungsvariable. Stellen Sie den Pfad des Java-Verzeichnisses ohne das bin/Verzeichnis ein, d C:\Program Files\Java\jdkxxxx\. H.

Denken Sie daran, diese auch JAVA_HOMEnach dem Upgrade von Java zu bearbeiten .

Schließen Sie die Eingabeaufforderung und öffnen Sie sie erneut

Obwohl Sie Änderungen vorgenommen haben PATH, sehen alle laufenden Programme, einschließlich cmd, nur die alten PATH. Dies liegt daran, dass die Liste aller Umgebungsvariablen erst zu Beginn der Ausführung in ein Programm kopiert wird. Danach wird nur die zwischengespeicherte Kopie konsultiert.

Es gibt keine gute Möglichkeit, die Umgebungsvariablen von cmd zu aktualisieren. Schließen Sie einfach die Eingabeaufforderung und öffnen Sie sie erneut. Wenn Sie eine IDE verwenden, schließen Sie sie ebenfalls und öffnen Sie sie erneut.

Siehe auch

Carlos c.
quelle
7
Dies funktionierte für mich, aber bevor ich versucht hatte, die Position am Ende der Pfadzeichenfolge hinzuzufügen. Warum funktioniert es nur am Anfang?
Eric H.
4
Vielen Dank! das funktioniert bei mir! @ Eric H: Das Hinzufügen am Ende funktioniert für mich. Soweit ich weiß, geht es von links nach rechts durch den Pfad und sucht nach javac.exe. Vielleicht haben Sie es in einem Verzeichnis, das vorne und javac.exe nicht funktioniert.
Dao Lam
36
+1 für das Schließen der Befehlszeile und das erneute Öffnen, das hat bei mir funktioniert!
Sameh Deabes
Ist es sinnvoll, wenn ich auf meinem Computer eine andere Version von jdk und jre habe?
Aaron Liu
Ich habe beim Einrichten dieser Variablen und all dem viel über das Betriebssystem gelernt. danke Mann
Aniket Jadhav
77

versuchen Sie dies .. Ich hatte es auch, aber jetzt löste es in XP ..

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

Sie haben den setBefehl falsch eingegeben - Sie haben den Backslash danach verpasst C:. Es sollte sein:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Raghuram
quelle
1
Ich habe dieses Recht verpasst, aber das war mein Tippfehler, als ich mein Anliegen hier postete. Ich habe es überprüft und alles ist richtig geschrieben, aber es gibt mir immer noch den gleichen Fehler.
user987137
1
@ user987137. Offensichtlich stimmt etwas nicht. Ist JDK (wohlgemerkt - JDK nicht JRE) am angegebenen Speicherort installiert C:\Program Files (x86)\Java\jdk1.7.0? Wenn ja, was passiert dann cd C:\Program Files (x86)\Java\jdk1.7.0\binund dann javac -version?
Raghuram
3
Ich hatte den gleichen Fehler beim Einrichten von JDK unter Win XP, obwohl ich den richtigen Pfad festgelegt hatte. Durch einfaches Schließen und erneutes Öffnen der Eingabeaufforderung wurde das Problem behoben.
Chris J
@ChrisJ - Dies liegt daran, dass die neue Eingabeaufforderung in einer neuen Sitzung gestartet wird und daher auch die aktualisierten Umgebungsvariablen lädt.
Cyclonecode
17

Führen Sie an der Eingabeaufforderung Folgendes aus: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" oder set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

Ich habe es versucht und es funktioniert gut.

frischer
quelle
thx, das funktionierte unter Windows
Csaba
Gute Antwort. Arbeitete für mich unter Windows 10
Roger
5

Wenn der Java-Befehl funktioniert und Probleme mit Javac auftreten. Überprüfen Sie dann zuerst, ob die Datei javac.exe im Bin-Verzeichnis von jdk vorhanden ist oder nicht. Wenn die Datei javac.exe vorhanden ist, wird sie JAVA_HOMEals Systemvariable festgelegt .

Umrao Rawat
quelle
3

Überprüfen Sie Ihre Umgebungsvariablen.

In meinem Fall hatte ich JAVA_HOME in der Menge Systemvariablen sowie in meinem Benutzerkonto Variablen und dieser wurde auf eine Set falsche Version von Java . Ich hatte auch das gleiche Problem mit der Pfadvariablen.

Nachdem JAVA_HOME aus meinen Benutzerkontovariablen gelöscht und der falsche Pfad aus der Pfadvariablen entfernt wurde, funktionierte es ordnungsgemäß.

Wabisabit
quelle