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.
Für erfahrene Leser:
PATH
. Entfernen Sie alte Java-Pfade.PATH
hinzu.JAVA_HOME
.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.
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.
*(Wenn Sie dies bereits verstanden haben, können Sie diesen Abschnitt überspringen). Wenn Sie Java herunterladen, haben Sie die Wahl zwischen:
java
, aber nicht javac
.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.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:
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.C:\Programmdateien\Java\jdk1.7.0_09\bin
- Sie haben mit ziemlicher Sicherheit eine neuere Version des JDK, die einen anderen Pfad hätte.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\<enter the correct Java folder here>\bin;%PATH%
Aber es ist einfach eine schlechte Idee im Allgemeinen.
Der richtige Weg beginnt damit, herauszufinden, wo Sie Java installiert haben. Dies hängt davon ab, wie Sie Java installiert haben.
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\
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.
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:
Steuerung sysdm.cpl,,3
SystemPropertiesAdvanced.exe
» UmgebungsvariablenSystemsteuerung\System und Sicherheit\System
» Erweiterte Systemeinstellungen (ganz links, in der Seitenleiste) » UmgebungsvariablenPATH
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
bereinigenSehen 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).
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.
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.
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.
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
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.