javac wird nicht als internes oder externes Kommando, lauffähiges Programm oder Batch-Datei erkannt

Beim Versuch, Java-Programme zu kompilieren, tritt ein Fehler auf.

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

Ich habe eine Lösung versucht, die die Variable PATH einbezieht, 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.

TL;DR

Für erfahrene Leser:

  1. Finden Sie den Java-Pfad; er sieht wie folgt aus: C:\Programmdateien\Java\jdkxxxx\bin`
  2. Suchen Sie im Startmenü nach "Umgebungsvariable", um den Optionsdialog zu öffnen.
  3. Untersuchen Sie PATH. Entfernen Sie alte Java-Pfade.
  4. Fügen Sie den neuen Java-Pfad zu PATH hinzu.
  5. Bearbeiten Sie JAVA_HOME.
  6. Schließen Sie die Konsole/IDE und öffnen Sie sie erneut.

    Herzlich willkommen! Sie sind auf eines der berüchtigtsten technischen Probleme gestoßen, mit denen Java-Anfänger zu kämpfen haben: die Fehlermeldung 'xyz' wird nicht als interner oder externer Befehl erkannt.... Kurz gesagt: Sie haben Java nicht korrekt installiert. Der Abschluss der Installation von Java unter Windows erfordert einige manuelle Schritte. Sie müssen diese Schritte immer nach der Installation von Java durchführen, auch nach einem Upgrade des JDK.

    Umgebungsvariablen und PATH

    (Wenn Sie dies bereits verstanden haben, können Sie die nächsten drei Abschnitte überspringen). Wenn Sie javac HelloWorld.java ausführen, muss cmd feststellen, wo sich javac.exe befindet. Dies wird mit der Umgebungsvariablen PATH erreicht. Eine [Umgebungsvariable] (https://en.wikipedia.org/wiki/Environment_variable) ist ein spezielles Schlüssel-Werte-Paar (z.B. windir=C:\WINDOWS). Die meisten werden mit dem Betriebssystem mitgeliefert, und einige sind für die ordnungsgemäße Funktion des Systems erforderlich. Eine Liste von ihnen wird an jedes Programm (einschließlich cmd) übergeben, wenn es gestartet wird. Unter Windows gibt es zwei Arten: Benutzer-Umgebungsvariablen und System-Umgebungsvariablen*. Sie können Ihre Umgebungsvariablen wie folgt 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. Sie ist eine Liste von Pfaden, getrennt durch ;. Wenn ein Befehl in cmd eingegeben wird, wird jedes Verzeichnis in der Liste nach einer passenden ausführbaren Datei durchsucht. Auf meinem Computer lautet PATH:

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 javac HelloWorld.java ausführen, durchsucht cmd, nachdem er erkannt hat, dass javac kein [interner Befehl] (https://ss64.com/nt/syntax-internal.html) ist, den [System-"PATH" gefolgt vom Benutzer-"PATH"] (https://superuser.com/questions/867728/user-vs-system-environment-variables-do-system-variables-override-user-variabl). Er geht mechanisch in jedes Verzeichnis in der Liste und prüft, ob javac.com, javac.exe, javac.bat, etc. vorhanden ist. Wenn er javac findet, führt er es aus. Wenn nicht, wird "javac' wird nicht als interner oder externer Befehl, als ausführbares Programm oder als Batch-Datei erkannt" ausgegeben. Sie müssen das Verzeichnis der ausführbaren Java-Programme zum PATH hinzufügen.

JDK vs. JRE

*(Wenn Sie dies bereits verstanden haben, können Sie diesen Abschnitt überspringen). Wenn Sie Java herunterladen, haben Sie die Wahl zwischen:

  • Das Java Runtime Environment (JRE), das die notwendigen Werkzeuge enthält, um Java-Programme auszuführen, aber nicht, um neue Programme zu kompilieren - es enthält java, aber nicht javac.
  • Das Java Development Kit (JDK), das sowohl java als auch javac enthält, zusammen mit einer Reihe anderer Entwicklungswerkzeuge. Das JDK ist eine Obermenge des JRE. Sie müssen sicherstellen, dass Sie das JDK installiert haben. Wenn Sie nur das JRE installiert haben, können Sie javac nicht ausführen, weil Sie keine Installation des Java-Compilers auf Ihrer Festplatte haben. Überprüfen Sie Ihre Windows-Programmliste und stellen Sie sicher, dass der Name des Java-Pakets die Worte "Development Kit" enthält.

    Don't use set

    *(Wenn Sie das ohnehin nicht vorhatten, können Sie diesen Abschnitt überspringen.) Mehrere 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

Tun Sie das nicht. Es gibt mehrere große Probleme mit diesem Befehl:

  1. Dieser Befehl löscht alles andere aus PATH und ersetzt es durch den Java-Pfad. Nachdem Sie diesen Befehl ausgeführt haben, werden Sie feststellen, dass verschiedene andere Befehle nicht mehr funktionieren.
  2. Ihr Java-Pfad ist wahrscheinlich nicht C:\Programmdateien\Java\jdk1.7.0_09\bin - Sie haben mit ziemlicher Sicherheit eine neuere Version des JDK, die einen anderen Pfad hätte.
  3. Der neue PATH gilt nur für die aktuelle cmd-Sitzung. Sie müssen den Befehl set 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\\bin;%PATH%

Aber es ist einfach eine schlechte Idee im Allgemeinen.

Finde den Java-Pfad

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

Exe-Installer

Sie haben Java installiert, indem Sie ein Installationsprogramm ausgeführt haben. Das Installationsprogramm von Oracle legt Java-Versionen unter C:\Program Files\Java\ (oder C:\Program Files (x86)\Java\) ab. Navigieren Sie mit dem Datei-Explorer oder der Eingabeaufforderung zu diesem Verzeichnis. Jeder Unterordner steht für eine Version von Java. Wenn es nur eine gibt, haben Sie sie gefunden. Andernfalls wählen Sie den Ordner, der wie die neuere Version aussieht. Vergewissern Sie sich, dass der Ordnername mit "jdk" beginnt (im Gegensatz zu "jre"). Geben Sie das Verzeichnis ein. Geben Sie dann das bin-Verzeichnis davon ein. Sie befinden sich nun im richtigen Verzeichnis. Kopieren Sie den Pfad. Wenn Sie im Datei-Explorer sind, klicken Sie auf die Adressleiste. Wenn Sie sich in der Eingabeaufforderung befinden, kopieren Sie die Eingabeaufforderung. Der resultierende Java-Pfad sollte die folgende Form haben (ohne Anführungszeichen):

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

Zip-Datei

Sie haben eine .zip-Datei heruntergeladen, die das JDK enthält. Entpacken Sie es an einem beliebigen Ort, an dem es Ihnen nicht in die Quere kommt; C:\Java\ ist eine akzeptable Wahl. Suchen Sie dann den Ordner bin irgendwo darin. Sie befinden sich nun 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

Dies ist der Dialog zum Bearbeiten des PATH. Es gibt zahlreiche Wege, um zu diesem Dialog zu gelangen, abhängig von Ihrer Windows-Version, den UI-Einstellungen und davon, wie durcheinander Ihre Systemkonfiguration ist. Probieren Sie einige davon aus:

  • Startmenü/Taskleisten-Suchfeld » suchen Sie nach "Umgebungsvariable"
  • Win + R » Steuerung sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe » Umgebungsvariablen
  • Datei-Explorer » Geben Sie in die Adressleiste Systemsteuerung\System und Sicherheit\System » Erweiterte Systemeinstellungen (ganz links, in der Seitenleiste) » Umgebungsvariablen
  • Desktop » Rechtsklick auf Diesen PC » Eigenschaften » Erweiterte Systemeinstellungen » Umgebungsvariablen
  • Startmenü » Rechtsklick auf Computer » Eigenschaften » Erweiterte Systemeinstellungen » Umgebungsvariablen
  • Systemsteuerung (Symbolmodus) » System » Erweiterte Systemeinstellungen » Umgebungsvariablen
  • Systemsteuerung (Kategoriemodus) » System und Sicherheit » System » Erweiterte Systemeinstellungen » Umgebungsvariablen
  • Desktop » Rechtsklick auf Arbeitsplatz » Erweitert » Umgebungsvariablen
  • Systemsteuerung » System » Erweitert » Umgebungsvariablen Jede dieser Optionen sollte Sie zum richtigen Einstellungsdialog führen. Wenn Sie Windows 10 verwenden, hat Microsoft Sie mit einer [schicken neuen Benutzeroberfläche] (https://betanews.com/2015/11/23/windows-10-finally-adds-a-new-path-editor/) zum Bearbeiten von PATH gesegnet. Andernfalls sehen Sie PATH in seiner vollen Semikolon-verkrusteten Pracht, eingequetscht in ein einzeiliges Textfeld. Tun Sie Ihr Bestes, um die notwendigen Änderungen vorzunehmen, ohne Ihr System zu zerstören.

    PATH bereinigen

    Sehen Sie sich PATH an. Sie haben mit ziemlicher Sicherheit zwei PATH-Variablen (wegen der Benutzer- und Systemumgebungsvariablen). Sie müssen sich beide ansehen. Suchen Sie nach anderen Java-Pfaden und entfernen Sie sie. Ihre Existenz kann alle Arten von Konflikten verursachen. (Zum Beispiel, wenn Sie JRE 8 und JDK 11 in PATH haben, in dieser Reihenfolge, dann wird javac den Java 11 Compiler aufrufen, der Version 55 .class Dateien erstellt, aber java wird die Java 8 JVM aufrufen, die nur bis Version 52 unterstützt, und Sie werden unsupported version errors erleben und nicht in der Lage sein, irgendwelche Programme zu kompilieren und auszuführen). Umgehen Sie diese Probleme, indem Sie sicherstellen, dass Sie nur einen Java-Pfad im PATH haben. Und wenn Sie schon dabei sind, können Sie auch gleich alte Java-Versionen deinstallieren. Und denken Sie daran, dass Sie nicht sowohl ein JDK als auch ein JRE haben müssen. Wenn Sie C:\ProgramData\Oracle\Java\javapath haben, entfernen Sie dieses ebenfalls. Oracle wollte das Problem, dass Java-Pfade nach Upgrades nicht mehr funktionieren, durch die Erstellung eines [symbolischen Links] (https://en.wikipedia.org/wiki/Symbolic_link) lösen, der immer auf die neueste Java-Installation verweist. Leider zeigt dieser Link 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, den PATH allgemein zu säubern. Wenn Sie Pfade zu Software haben, die nicht mehr auf Ihrem PC installiert ist, können Sie diese entfernen. Sie können auch die Reihenfolge der Pfade umstellen (wenn Sie sich um solche Dinge kümmern).

    Hinzufügen zu PATH

    Nehmen Sie nun den Java-Pfad, den Sie vor drei Schritten gefunden haben, und fügen Sie ihn in den System-"PATH" ein. Es sollte keine Rolle spielen, wo in der Liste Ihr neuer Pfad steht; ihn am Ende zu platzieren ist eine gute Wahl. Wenn Sie die Benutzeroberfläche vor Windows 10 verwenden, achten Sie darauf, dass Sie die Semikolons richtig gesetzt haben. Jeder Pfad in der Liste sollte durch genau ein Semikolon getrennt sein. Hier gibt es nicht viel mehr zu sagen. Fügen Sie einfach den Pfad zu PATH hinzu und klicken Sie auf OK.

    Setzen Sie JAVA_HOME

    Wenn Sie schon dabei sind, können Sie auch gleich JAVA_HOME setzen. Dies ist eine weitere Umgebungsvariable, die auch den Java-Pfad enthalten sollte. Viele Java- und Nicht-Java-Programme, einschließlich des beliebten Java-Build-Systems [Gradle] (https://gradle.org/), geben Fehler aus, wenn sie nicht korrekt gesetzt ist. Wenn JAVA_HOME nicht existiert, erstellen Sie es als eine neue Systemumgebungsvariable. Setzen Sie sie auf denselben Java-Pfad, den Sie zu PATH hinzugefügt haben. Denken Sie daran, JAVA_HOME auch nach dem Upgrade von Java zu bearbeiten.

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

    Auch wenn Sie PATH geändert haben, sehen alle laufenden Programme, einschließlich cmd, nur den alten PATH. Das liegt daran, dass die Liste aller Umgebungsvariablen nur dann in ein Programm kopiert wird, wenn es mit der Ausführung beginnt; danach konsultiert es nur noch die zwischengespeicherte Kopie. Es gibt keine gute Möglichkeit, [die Umgebungsvariablen von cmd'aufzufrischen] (https://stackoverflow.com/questions/171588/is-there-a-command-to-refresh-environment-variables-from-the-command-prompt-in-w), also schließen Sie einfach die Eingabeaufforderung und öffnen Sie sie erneut. Wenn Sie eine IDE verwenden, schließen Sie auch diese und öffnen Sie sie erneut.

    Siehe auch

  • Was sind PATH und andere Umgebungsvariablen, und wie kann ich sie setzen oder verwenden?](https://superuser.com/questions/284342/what-are-path-and-other-environment-variables-and-how-can-i-set-or-use-them)
  • Wie setze oder ändere ich die Systemvariable PATH?
  • Wie man den Pfad und die Umgebungsvariablen in Windows setzt
  • Wie setzt man Pfad-Umgebungsvariablen in Windows 10
Kommentare (5)

Sie haben den Befehl set falsch eingegeben - Sie haben den Backslash nach C: vergessen. Er sollte lauten:

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

Wenn der Java-Befehl funktioniert und ein Problem mit javac auftritt, dann prüfen Sie zuerst, ob die Datei javac.exe im bin-Verzeichnis von jdk vorhanden ist oder nicht. Wenn die Datei javac.exe vorhanden ist, setzen Sie JAVA_HOME als Systemvariable.

Kommentare (0)