Sto riscontrando un errore mentre cerco di compilare programmi Java.
Sono su Windows (questo è un problema specifico di Windows) e ho l'ultimo JDK installato.
Ho tentato una soluzione che coinvolge la variabile PATH
, ma l'errore persiste.
Uscita 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.
Per i lettori esperti:
C:\Program Files\Java\jdkxxxx\bin\
.PATH
. Rimuovi i vecchi percorsi di Java.PATH
.JAVA_HOME
.Benvenuti!
Hai incontrato uno dei più noti problemi tecnici che i principianti di Java devono affrontare: il messaggio di errore 'xyz' non è riconosciuto come comando interno o esterno...
.
In poche parole, non hai installato Java correttamente. Finalizzare l'installazione di Java su Windows richiede alcuni passaggi manuali. Devi sempre eseguire questi passi dopo aver installato Java, anche dopo aver aggiornato il JDK.
PATH
.(Se hai già capito questo, sentiti libero di saltare le prossime tre sezioni.)
Quando si esegue javac HelloWorld.java
, cmd deve determinare dove si trova javac.exe
. Questo viene fatto con PATH
, una variabile d'ambiente.
Una variabile d'ambiente è una speciale coppia chiave-valore (ad esempio windir=C:\WINDOWS
). La maggior parte viene fornita con il sistema operativo, e alcune sono richieste per il corretto funzionamento del sistema. Una lista di esse viene passata ad ogni programma (incluso cmd) quando si avvia. Su Windows, ce ne sono due tipi: variabili d'ambiente utente e variabili d'ambiente di sistema.
Puoi vedere le tue variabili d'ambiente in questo modo:
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 variabile più importante è PATH
. È una lista di percorsi, separati da ;
. Quando un comando viene inserito in cmd, ogni directory nell'elenco verrà scansionata per un eseguibile corrispondente.
Sul mio computer, 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
Quando si esegue javac HelloWorld.java
, cmd, dopo aver capito che javac
non è un comando interno, cerca nel sistema PATH
seguito dal PATH
dell'utente. Entra meccanicamente in ogni directory della lista, e controlla se javac.com
, javac.exe
, javac.bat
, ecc. è presente. Quando trova javac
, lo esegue. Quando non lo trova, stampa 'javac' non è riconosciuto come comando interno o esterno, programma operativo o file batch.
Devi aggiungere la directory degli eseguibili Java al PATH
.
(Se hai già capito questo, sentiti libero di saltare questa sezione.) Quando scarichi Java, ti viene offerta una scelta tra:
java
ma non javac
.java
che javac
, insieme ad una serie di altri strumenti di sviluppo. Il JDK è un superset del JRE.
Devi assicurarti di aver installato il JDK. Se hai installato solo il JRE, non puoi eseguire javac
perché non hai un'installazione del compilatore Java sul tuo disco fisso. Controlla la lista dei programmi di Windows, e assicurati che il nome del pacchetto Java includa le parole "Development Kit".set
.(Se non avevi intenzione di farlo comunque, sentiti libero di saltare questa sezione.). Molte altre risposte raccomandano di eseguire qualche variazione di:
C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin
Non fatelo. Ci sono diversi problemi importanti con questo comando:
PATH
e lo sostituisce con il percorso di Java. Dopo aver eseguito questo comando, potreste trovare vari altri comandi che non funzionano.C:\Program Files\Java\jdk1.7.0_09\bin
- hai quasi sicuramente una versione più recente del JDK, che avrebbe un percorso diverso.PATH
si applica solo alla sessione cmd corrente. Dovrai reinserire il comando set
ogni volta che aprirai il Prompt dei Comandi.
I punti #1 e #2 possono essere risolti con questa versione leggermente migliore:C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%
Ma è solo una cattiva idea in generale.
Il modo giusto inizia con il trovare dove avete installato Java. Questo dipende da come hai installato Java.
Hai installato Java eseguendo un programma di installazione. Il programma di installazione di Oracle mette le versioni di Java sotto C:\Program Files\Java\
(o C:\Program Files (x86)\Java\
). Con Esplora file o il Prompt dei comandi, naviga in quella directory.
Ogni sottocartella rappresenta una versione di Java. Se ce n'è solo una, l'avete trovata. Altrimenti, scegli quella che sembra la versione più recente. Assicurati che il nome della cartella inizi con jdk
(al contrario di jre
). Inserisci la directory.
Poi inserisci la directory bin
di quella.
Ora sei nella directory corretta. Copia il percorso. Se in File Explorer, clicca sulla barra degli indirizzi. Se in Prompt dei comandi, copy il prompt.
Il percorso Java risultante dovrebbe essere nella forma di (senza virgolette):
C:\Program Files\Java\jdkxxxx\bin\
Hai scaricato un .zip contenente il JDK. Estrailo in un posto a caso dove non ti sarà d'intralcio; "C:Java" è una scelta accettabile.
Poi individua la cartella bin
da qualche parte al suo interno.
Ora sei nella directory corretta. Copia il suo percorso. Questo è il percorso di Java.
Ricorda di non spostare mai la cartella, perché questo invaliderebbe il percorso.
Questa è la finestra di dialogo per modificare il PATH
. Ci sono molti modi per arrivare a questa finestra di dialogo, a seconda della versione di Windows, delle impostazioni dell'interfaccia utente e di quanto sia incasinata la tua configurazione di sistema.
Prova alcuni di questi:
SystemPropertiesAdvanced.exe
» Variabili d'ambientePannello di controllo e sicurezza
» Impostazioni di sistema avanzate (all'estrema sinistra, nella barra laterale) » Variabili d'ambientePATH
. Altrimenti, vedrai il PATH
nella sua gloria piena di punti e virgole, schiacciato in una casella di testo di una sola riga. Fai del tuo meglio per fare le modifiche necessarie senza rompere il tuo sistema.PATH
.Guarda il PATH
. Quasi sicuramente hai due variabili PATH
(a causa delle variabili d'ambiente utente e di sistema). Devi guardarle entrambe.
Controlla se ci sono altri percorsi Java e rimuovili. La loro esistenza può causare ogni sorta di conflitto. (Per esempio, se avete JRE 8 e JDK 11 in PATH
, in quest'ordine, allora javac
invocherà il compilatore Java 11, che creerà file .class
versione 55, ma java
invocherà la JVM Java 8, che supporta solo fino alla versione 52, e voi sperimenterete unsupported version errors e non sarete in grado di compilare ed eseguire alcun programma). Evita questi problemi assicurandoti di avere un solo percorso Java in PATH
. E già che ci sei, potresti anche disinstallare le vecchie versioni di Java. E ricorda che non è necessario avere [https://stackoverflow.com/questions/32988601/do-i-need-both-jdk-and-jre] sia un JDK che un JRE.
Se hai C:\ProgramData\Oracle\Java\javapath
, rimuovi anche quello. Oracle intendeva risolvere il problema dei percorsi Java che si interrompono dopo gli aggiornamenti creando un link simbolico che avrebbe sempre puntato all'ultima installazione di Java. Sfortunatamente, spesso finisce per puntare alla posizione sbagliata o semplicemente non funziona. È meglio rimuovere questa voce e gestire manualmente il percorso di Java.
Questa è anche una buona occasione per eseguire una pulizia generale del PATH
. Se hai percorsi relativi a software non più installati sul tuo PC, puoi rimuoverli. Puoi anche mescolare l'ordine dei percorsi (se ti interessano cose del genere).
PATH
.Ora prendi il percorso di Java che hai trovato tre passi fa, e mettilo nel PATH
di sistema.
Non dovrebbe importare in quale punto della lista va il tuo nuovo percorso; metterlo alla fine è una buona scelta.
Se stai usando l'interfaccia pre-Windows 10, assicurati di aver messo i punti e virgola correttamente. Dovrebbe essercene esattamente uno che separa ogni percorso nella lista.
Non c'è davvero molto altro da dire qui. Aggiungi semplicemente il percorso a PATH
e clicca su OK.
JAVA_HOME
.Già che ci sei, puoi anche impostare la JAVA_HOME
. Questa è un'altra variabile d'ambiente che dovrebbe contenere anche il percorso di Java. Molti programmi Java e non, incluso il popolare sistema di compilazione Java Gradle, daranno errori se non è impostato correttamente.
Se JAVA_HOME
non esiste, creala come una nuova variabile d'ambiente di sistema. Impostala sullo stesso percorso Java che hai aggiunto a PATH
.
Ricordati di modificare la JAVA_HOME
dopo aver aggiornato Java.
Anche se hai modificato PATH
, tutti i programmi in esecuzione, incluso cmd, vedono solo il vecchio PATH
. Questo perché l'elenco di tutte le variabili d'ambiente viene copiato in un programma solo quando inizia l'esecuzione; in seguito, consulta solo la copia nella cache.
Non c'è un buon modo per [aggiornare le variabili d'ambiente di cmd'https://stackoverflow.com/questions/171588/is-there-a-command-to-refresh-environment-variables-from-the-command-prompt-in-w], quindi basta chiudere il Prompt dei comandi e aprirlo di nuovo. Se state usando un IDE, chiudete e riaprite anche quello.
Se il comando java sta funzionando e si sta avendo un problema con javac, allora per prima cosa controllate che il file javac.exe sia presente o meno nella directory bin di jdk.
Se il file javac.exe esiste allora imposta JAVA_HOME
come variabile di sistema.