Ik ervaar een fout tijdens het compileren van Java-programma’s.
Ik gebruik Windows (dit is een Windows-specifiek probleem) en ik heb de nieuwste JDK geïnstalleerd.
Ik heb een oplossing geprobeerd met de variabele PATH
, maar de fout blijft bestaan.
Console-uitvoer:
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.
Antwoord 1, autoriteit 100%
TL;DR
Voor ervaren lezers:
- Zoek het Java-pad; het ziet er als volgt uit:
C:\Program Files\Java\jdkxxxx\bin\
- Zoek in het startmenu naar “omgevingsvariabele” om het dialoogvenster met opties te openen.
- Bekijk
PATH
. Oude Java-paden verwijderen. - Voeg het nieuwe Java-pad toe aan
PATH
. - Bewerk
JAVA_HOME
. - Sluit de console/IDE en open deze opnieuw.
Welkom!
U bent een van de meest beruchte technische problemen tegengekomen waarmee Java-beginners worden geconfronteerd: de 'xyz' is not recognized as an internal or external command...
-foutmelding.
Kortom, je hebt Java niet correct geïnstalleerd. Het voltooien van de installatie van Java op Windows vereist enkele handmatige stappen. U moet deze stappen altijd uitvoeren na het installeren van Java, ook na het upgraden van de JDK.
Omgevingsvariabelen en PATH
(Als u dit al begrijpt, kunt u de volgende drie secties overslaan.)
Als je javac HelloWorld.java
uitvoert, moet cmd bepalen waar javac.exe
zich bevindt. Dit wordt bereikt met PATH
, een omgevingsvariabele.
Een omgevingsvariabele is een speciaal sleutel-waardepaar ( bijv. windir=C:\WINDOWS
). De meeste werden geleverd met het besturingssysteem en sommige zijn vereist voor een goede werking van het systeem. Een lijst ervan wordt aan elk programma (inclusief cmd) doorgegeven wanneer het wordt gestart. Op Windows zijn er twee typen: gebruikersomgevingsvariabelen en systeemomgevingsvariabelen.
U kunt uw omgevingsvariabelen als volgt zien:
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
...
De belangrijkste variabele is PATH
. Het is een lijst met paden, gescheiden door ;
. Wanneer een opdracht wordt ingevoerd in cmd, wordt elke map in de lijst gescand op een overeenkomend uitvoerbaar bestand.
Op mijn computer is 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
Wanneer u javac HelloWorld.java
, cmd, uitvoert nadat u zich realiseert dat javac
geen interne opdracht, zoekt in het systeem PATH
gevolgd door de gebruiker PATH
. Het voert mechanisch elke map in de lijst in en controleert of javac.com
, javac.exe
, javac.bat
, enz. is aanwezig. Wanneer het javac
vindt, wordt het uitgevoerd. Als dit niet het geval is, wordt afgedrukt 'javac' is not recognized as an internal or external command, operable program or batch file.
U moet de Java-map met uitvoerbare bestanden toevoegen aan PATH
.
JDK versus JRE
(Als u dit al begrijpt, kunt u dit gedeelte overslaan.)
Bij het downloaden van Java krijgt u de keuze tussen:
- De Java Runtime Environment (JRE), die de benodigde tools bevat om Java uit te voeren programma’s, maar niet om nieuwe te compileren het bevat
java
maar nietjavac
. - De Java Development Kit (JDK), die zowel
java
enjavac
, samen met een groot aantal andere ontwikkeltools. De JDK is een superset van de JRE.
Je moet ervoor zorgen dat je de JDK hebt geïnstalleerd. Als je alleen de JRE hebt geïnstalleerd, kun je javac
niet uitvoeren omdat je geen installatie van de Java-compiler op je harde schijf hebt. Controleer uw Windows-programmalijst en zorg ervoor dat de naam van het Java-pakket de woorden “Development Kit” bevat.
Gebruik set
niet
(Als u dit toch niet van plan was, kunt u dit gedeelte overslaan.)
Verschillende andere antwoorden raden aan om een variatie uit te voeren van:
C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin
Doe dat niet. Er zijn verschillende grote problemen met dat commando:
- Dit commando wist al het andere van
PATH
en vervangt het door het Java-pad. Nadat u deze opdracht hebt uitgevoerd, kunt u merken dat verschillende andere opdrachten niet werken. - Uw Java-pad is waarschijnlijk niet
C:\Program Files\Java\jdk1.7.0_09\bin
u heeft vrijwel zeker een nieuwere versie van de JDK, die een ander pad zou hebben. - Het nieuwe
PATH
is alleen van toepassing op de huidige cmd-sessie. Elke keer dat u de opdrachtprompt opent, moet u de opdrachtset
opnieuw invoeren.
Punten #1 en #2 kunnen worden opgelost met deze iets betere versie:
C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%
Maar het is in het algemeen gewoon een slecht idee.
Zoek het Java-pad
De juiste manier begint met het vinden waar je Java hebt geïnstalleerd. Dit hangt af van hoe je Java hebt geïnstalleerd.
Exe-installatieprogramma
U hebt Java geïnstalleerd door een installatieprogramma uit te voeren. Het installatieprogramma van Oracle plaatst versies van Java onder C:\Program Files\Java\
(of C:\Program Files (x86)\Java\
). Navigeer met Verkenner of Opdrachtprompt naar die map.
Elke submap vertegenwoordigt een versie van Java. Als er maar één is, heb je die gevonden. Kies anders degene die eruitziet als de nieuwere versie. Zorg ervoor dat de mapnaam begint met jdk
(in tegenstelling tot jre
). Voer de map in.
Voer dan de bin
directory daarvan in.
U bent nu in de juiste directory. Kopieer het pad. Als u in Verkenner bent, klikt u op de adresbalk. Als in de opdrachtprompt, kopieer de prompt.
Het resulterende Java-pad moet de vorm hebben van (zonder aanhalingstekens):
C:\Program Files\Java\jdkxxxx\bin\
Zip-bestand
Je hebt een .zip gedownload met daarin de JDK. Pak het uit naar een willekeurige plaats waar het je niet in de weg staat; C:\Java\
is een acceptabele keuze.
Zoek de map bin
ergens in de map.
U bent nu in de juiste directory. Kopieer het pad. Dit is het Java-pad.
Vergeet niet om de map nooit te verplaatsen, omdat dat het pad ongeldig zou maken.
Open het instellingenvenster
Dat is het dialoogvenster om PATH
te bewerken. Er zijn talloze manieren om naar dat dialoogvenster te gaan, afhankelijk van uw Windows-versie, UI-instellingen en hoe verknoeid uw systeemconfiguratie is.
Probeer enkele van deze:
- Startmenu/taakbalk zoekvak zoek naar “omgevingsvariabele”
- Win + R
control sysdm.cpl,,3
- Win + R
SystemPropertiesAdvanced.exe
Omgevingsvariabelen - Bestandsverkenner typ in adresbalk
Control Panel\System and Security\System
Geavanceerde systeeminstellingen (uiterst links in zijbalk) Omgevingsvariabelen - Bureaublad klik met de rechtermuisknop op Deze pc Eigenschappen Geavanceerde systeeminstellingen Omgevingsvariabelen
- Menu Start klik met de rechtermuisknop op Computer Eigenschappen Geavanceerde systeeminstellingen Omgevingsvariabelen
- Configuratiescherm (pictogrammodus) Systeem Geavanceerde systeeminstellingen Omgevingsvariabelen
- Configuratiescherm (categoriemodus) Systeem en beveiliging Systeem Geavanceerde systeeminstellingen Omgevingsvariabelen
- Bureaublad klik met de rechtermuisknop op Deze computer Geavanceerd Omgevingsvariabelen
- Configuratiescherm Systeem Geavanceerd Omgevingsvariabelen
Elk van deze zou u naar het juiste instellingenvenster moeten brengen.
Als je Windows 10 gebruikt, heeft Microsoft je gezegend met een fantastische nieuwe gebruikersinterface om PATH
te bewerken. Anders zie je PATH
in zijn volle glorie met puntkomma’s, geperst in een tekstvak van één regel. Doe je best om de nodige bewerkingen uit te voeren zonder je systeem te beschadigen.
Opschonen PATH
Kijk naar PATH
. Je hebt bijna zeker twee PATH
variabelen (vanwege gebruiker vs. systeem omgevingsvariabelen). Je moet ze allebei bekijken.
Controleer op andere Java-paden en verwijder deze. Hun bestaan kan allerlei conflicten veroorzaken. (Als je bijvoorbeeld JRE 8 en JDK 11 hebt in PATH
, in die volgorde, dan zal javac
de Java 11-compiler aanroepen, die versie 55 .class
-bestanden, maar java
roept de Java 8 JVM aan, die alleen versie 52 ondersteunt, en u zult niet-ondersteunde versiefouten en niet in staat zijn om programma’s te compileren en uit te voeren.) Omzeil deze problemen door ervoor te zorgen dat u slechts één Java-pad hebben in PATH
. En terwijl je toch bezig bent, kun je net zo goed oude Java-versies verwijderen, te. En onthoud dat u niet nodig zowel een JDK als een JRE.
Als je C:\ProgramData\Oracle\Java\javapath
hebt, verwijder die dan ook. Oracle wilde het probleem oplossen van Java-paden die na upgrades worden verbroken door een symbolische link te maken die altijd naar naar de nieuwste Java-installatie. Helaas verwijst het vaak naar de verkeerde locatie of werkt gewoon niet. Het is beter om dit item te verwijderen en het Java-pad handmatig te beheren.
Dit is ook een goede gelegenheid om algemene huishoudelijke taken uit te voeren op PATH
. Als u paden heeft met betrekking tot software die niet meer op uw pc is geïnstalleerd, kunt u deze verwijderen. Je kunt ook de volgorde van de paden in willekeurige volgorde wijzigen (als je dat soort dingen belangrijk vindt).
Toevoegen aan PATH
Neem nu het Java-pad dat je drie stappen geleden hebt gevonden en plaats het in het systeem PATH
.
Het zou niet moeten uitmaken waar in de lijst je nieuwe pad naartoe gaat; het aan het einde plaatsen is een goede keuze.
Als u de gebruikersinterface van vóór Windows 10 gebruikt, zorg er dan voor dat u de puntkomma’s correct hebt geplaatst. Er moet er precies één zijn die elk pad in de lijst scheidt.
Er valt hier eigenlijk niet veel anders te zeggen. Voeg eenvoudig het pad toe aan PATH
en klik op OK.
Stel JAVA_HOME
in
Terwijl je toch bezig bent, kun je net zo goed JAVA_HOME
instellen. Dit is een andere omgevingsvariabele die ook het Java-pad moet bevatten. Veel Java- en niet-Java-programma’s, waaronder de populaire Java-buildsystemen Maven en Gradle, geeft fouten als het niet correct is ingesteld.
Als JAVA_HOME
niet bestaat, maak deze dan aan als een nieuwe systeemomgevingsvariabele. Stel het in op het pad van de Java-directory zonder de bin/
-directory, d.w.z. C:\Program Files\Java\jdkxxxx\
.
Vergeet niet om JAVA_HOME
ook te bewerken na het upgraden van Java.
Opdrachtprompt sluiten en opnieuw openen
Hoewel je PATH
hebt gewijzigd, zien alle actieve programma’s, inclusief cmd, alleen het oude PATH
. Dit komt omdat de lijst met alle omgevingsvariabelen pas naar een programma wordt gekopieerd wanneer het wordt uitgevoerd; daarna raadpleegt het alleen de gecachte kopie.
Er is geen goede manier om vernieuw de omgevingsvariabelen van cmd, dus sluit gewoon de opdrachtprompt en open deze opnieuw. Als u een IDE gebruikt, sluit deze dan en open deze ook opnieuw.
Zie ook
- Wat zijn PATH en andere omgevingsvariabelen, en hoe kan ik ze instellen of gebruiken?
- Hoe stel of wijzig ik de PATH-systeemvariabele?
- Het pad en de omgevingsvariabelen instellen in Windows
- Pad-omgevingsvariabelen instellen in Windows 10
Antwoord 2, autoriteit 16%
probeer dit eens..
Ik had het ook, maar nu is het opgelost in XP..
C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java
Antwoord 3, autoriteit 10%
Je hebt de opdracht set
verkeerd getypt je hebt de backslash na C:
gemist. Het zou moeten zijn:
C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Antwoord 4, autoriteit 4%
Voer het volgende uit vanaf de opdrachtprompt:
set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"
of
set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"
Ik heb dit geprobeerd en het werkt goed.
Antwoord 5
Als het java-commando werkt en problemen met javac krijgen. controleer dan eerst of jdk’s bin directory javac.exe bestand aanwezig is of niet.
Als het javac.exe-bestand bestaat, stel dan JAVA_HOME
in als systeemvariabele.
Antwoord 6
Controleer uw omgevingsvariabelen.
In mijn geval had ik JAVA_HOME ingesteld in de Systeemvariabelen en in mijn Gebruikersaccount variabelen en de laatste was ingesteld op een verkeerde versie van Java . Ik had hetzelfde probleem met de variabele Path.
Na het verwijderen van JAVA_HOME uit mijn gebruikersaccount variabelen en het verwijderen van het verkeerde pad uit de padvariabele werkte het correct.