javac non è riconosciuto come comando interno o esterno, programma eseguibile o file batch [chiuso]


253

Riscontro un errore durante il tentativo di compilare programmi Java.

Sono su Windows (questo è un problema specifico di Windows) e ho installato l'ultimo JDK.

Ho tentato una soluzione che coinvolge la PATHvariabile, 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.

7
penso che il tuo percorso non sia impostato. vai nel tuo ambiente variabile e metti in cammino il loro
Ron,

2
Questa domanda sembra essere fuori tema perché è facilmente reperibile nelle attuali istruzioni di installazione di JDK e la risposta è aggiornata e di qualità superiore rispetto a qualsiasi risposta qui. È anche prontamente disponibile, per tutte le piattaforme, nel primo capitolo del tutorial ufficiale per iniziare .
Jason C

8
Ta per l'informazione Jason C. Ma confesso di trovare la decisione di chiamare questo thread off-topic sembra essere in contrasto con il numero di altri che hanno risposto a questa risposta. Come sto per fare.
Matt Stevens,


L'aggiunta di una nuova variabile è più semplice e una volta creata una nuova variabile "PERCORSO" assicurati di aggiungere il punto e virgola (;) e la fine del valore.
Amir Md Amiruzzaman,

Risposte:


434

TL; DR

Per lettori esperti:

  1. Trova il percorso Java; sembra così:C:\Program Files\Java\jdkxxxx\bin\
  2. Cerca nel menu Start "variabile d'ambiente" per aprire la finestra di dialogo delle opzioni.
  3. Esaminate PATH. Rimuovi i vecchi percorsi Java.
  4. Aggiungi il nuovo percorso Java a PATH.
  5. Modifica JAVA_HOME.
  6. Chiudi e riapri la console / IDE.

Benvenuto!

Hai riscontrato uno dei problemi tecnici più noti per i principianti di Java: il 'xyz' is not recognized as an internal or external command...messaggio di errore.

In breve, Java non è stato installato correttamente . La finalizzazione dell'installazione di Java su Windows richiede alcuni passaggi manuali. È necessario eseguire sempre questi passaggi dopo l'installazione di Java, anche dopo aver aggiornato JDK.

Variabili d'ambiente e PATH

(Se lo capisci già, sentiti libero di saltare le tre sezioni successive.)

Quando corri javac HelloWorld.java, cmd deve determinare dove javac.exesi trova. Questo si ottiene con PATHuna variabile d'ambiente.

Una variabile d'ambiente è una coppia chiave-valore speciale (ad es windir=C:\WINDOWS.). La maggior parte veniva fornita con il sistema operativo e alcuni sono necessari per il corretto funzionamento del sistema. Un elenco di questi viene passato a tutti i programmi (incluso cmd) all'avvio. Su Windows , ci sono due tipi : variabili di ambiente utente e variabili di ambiente di sistema .

Puoi vedere le variabili di 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. È un elenco di percorsi, separati da ;. Quando un comando viene immesso 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 esegui javac HelloWorld.java, cmd, dopo aver realizzato che javacnon è un comando interno , cerca il sistema PATHseguito dall'utentePATH . Si entra meccanicamente ogni directory nella lista, e controlla se javac.com, javac.exe, javac.bat, ecc è presente. Quando trova javac, lo esegue. Quando non lo fa, stampa'javac' is not recognized as an internal or external command, operable program or batch file.

È necessario aggiungere la directory degli eseguibili Java a PATH.

JDK vs. JRE

(Se lo capisci già, sentiti libero di saltare questa sezione.)

Durante il download di Java, viene offerta una scelta tra:

  • Il Java Runtime Environment (JRE), che comprende gli strumenti necessari per eseguire programmi Java, ma non per compilare nuovi - contiene java, ma non javac.
  • Il Java Development Kit (JDK), che contiene sia javae javac, insieme a una serie di altri strumenti di sviluppo. Il JDK è un superset del JRE.

È necessario assicurarsi di aver installato JDK . Se è stato installato solo JRE, non è possibile eseguire javacperché non si dispone di un'installazione del compilatore Java sul disco rigido. Controlla l'elenco dei programmi di Windows e assicurati che il nome del pacchetto Java contenga le parole "Development Kit" in esso.

Non usare set

(Se non avevi intenzione di farlo, non esitare a saltare questa sezione.)

Diverse altre risposte raccomandano di eseguire alcune variazioni di:

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

Non farlo. Esistono diversi problemi importanti con quel comando:

  1. Questo comando cancella tutto il resto da PATHe lo sostituisce con il percorso di Java. Dopo aver eseguito questo comando, è possibile che vari altri comandi non funzionino.
  2. Probabilmente il tuo percorso Java non lo èC:\Program Files\Java\jdk1.7.0_09\bin : hai quasi sicuramente una versione più recente di JDK, che avrebbe un percorso diverso.
  3. Il nuovo PATH si applica solo alla sessione cmd corrente. Dovrai reinserire il setcomando ogni volta che apri 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.

Trova il percorso Java

Il modo giusto inizia con la ricerca di dove hai installato Java. Questo dipende da come hai installato Java.

Programma di installazione exe

Java è stato installato eseguendo un programma di installazione. Il programma di installazione di Oracle posiziona le versioni di Java sotto C:\Program Files\Java\(o C:\Program Files (x86)\Java\). Con Esplora file o il prompt dei comandi, accedere a quella directory.

Ogni sottocartella rappresenta una versione di Java. Se ce n'è solo uno, l'hai trovato. Altrimenti, scegli quello che assomiglia alla versione più recente. Assicurarsi che il nome della cartella inizi con jdk(anziché jre). Inserisci la directory

Quindi inserisci la bindirectory di quello.

Ora sei nella directory corretta. Copia il percorso. Se in Esplora file, fai clic sulla barra degli indirizzi. Se nel Prompt dei comandi, copiare il prompt.

Il percorso Java risultante dovrebbe essere nella forma di (senza virgolette):

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

File zip

Hai scaricato un .zip contenente il JDK. Estrailo in un posto casuale dove non ti ostacoli; C:\Java\è una scelta accettabile.

Quindi individuare la bincartella da qualche parte al suo interno.

Ora sei nella directory corretta. Copia il suo percorso. Questo è il percorso Java.

Ricorda di non spostare mai la cartella, poiché ciò invaliderebbe il percorso.

Apri la finestra di dialogo delle impostazioni

Questa è la finestra di dialogo da modificare PATH. Esistono numerosi modi per accedere a quella finestra di dialogo, a seconda della versione di Windows, delle impostazioni dell'interfaccia utente e della confusione della configurazione del sistema.

Prova alcuni di questi:

  • Avvia la casella di ricerca Menu / barra delle applicazioni »cerca" variabile d'ambiente "
  • Win + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe» Variabili d'ambiente
  • Esplora file »digitare nella barra degli indirizzi Control Panel\System and Security\System» Impostazioni di sistema avanzate (all'estrema sinistra, nella barra laterale) »Variabili d'ambiente
  • Desktop »fai clic con il pulsante destro del mouse su questo PC» Proprietà »Impostazioni di sistema avanzate» Variabili d'ambiente
  • Menu Start »tasto destro del mouse su Computer» Proprietà »Impostazioni di sistema avanzate» Variabili d'ambiente
  • Pannello di controllo (modalità icona) »Sistema» Impostazioni di sistema avanzate »Variabili d'ambiente
  • Pannello di controllo (modalità categoria) »Sistema e sicurezza» Sistema »Impostazioni di sistema avanzate» Variabili d'ambiente
  • Desktop »tasto destro del mouse su Risorse del computer» Avanzate »Variabili d'ambiente
  • Pannello di controllo »Sistema» Avanzate »Variabili d'ambiente

Ognuno di questi dovrebbe portarti alla finestra di dialogo delle impostazioni corretta.

Se sei su Windows 10, Microsoft ti ha benedetto con una nuova interfaccia utente da modificare PATH. Altrimenti, vedrai PATHnella sua gloria piena di punti e virgola, racchiusa in una casella di testo a riga singola. Fai del tuo meglio per apportare le modifiche necessarie senza rompere il sistema.

Pulito PATH

Guarda PATH. Hai quasi sicuramente due PATHvariabili (a causa delle variabili utente vs. ambiente di sistema). Devi guardarli entrambi.

Controlla altri percorsi Java e rimuovili. La loro esistenza può causare ogni sorta di conflitto. (Ad esempio, se si dispone di JRE 8 e JDK 11 in PATH, in questo ordine, javacverrà richiamato il compilatore Java 11, che creerà i .classfile della versione 55 , ma javarichiamerà JVM Java 8, che supporta solo fino alla versione 52, e riscontrerai errori di versione non supportati e non sarai in grado di compilare ed eseguire alcun programma.) Evita questi problemi assicurandoti di avere solo un percorso Java PATH. E mentre ci sei, puoi anche disinstallare anche le vecchie versioni di Java . E ricorda che non devi avere sia un JDK che un JRE.

Se lo hai C:\ProgramData\Oracle\Java\javapath, rimuovi anche quello . Oracle intendeva risolvere il problema della rottura dei percorsi Java dopo gli aggiornamenti creando un collegamento simbolico che puntava sempre all'ultima installazione Java. Sfortunatamente, spesso finisce per indicare la posizione sbagliata o semplicemente non funziona . È meglio rimuovere questa voce e gestire manualmente il percorso Java.

Ora è anche una buona opportunità per eseguire le pulizie generali PATH. Se sul PC sono presenti percorsi relativi al software non più installati, è possibile rimuoverli. Puoi anche mescolare l'ordine dei percorsi intorno (se ti preoccupi di cose del genere).

Aggiungere a PATH

Ora prendi il percorso Java che hai trovato tre passaggi fa e inseriscilo nel sistema PATH.

Non dovrebbe importare dove si trova il tuo nuovo percorso nell'elenco; posizionarlo alla fine è una buona scelta.

Se stai utilizzando l'interfaccia utente precedente a Windows 10, assicurati di aver inserito correttamente i punti e virgola. Dovrebbe esserci esattamente uno che separa ogni percorso nell'elenco.

Non c'è davvero molto altro da dire qui. Aggiungi semplicemente il percorso PATHe fai clic su OK.

Impostato JAVA_HOME

Mentre ci sei, puoi anche impostare JAVA_HOME. Questa è un'altra variabile d'ambiente che dovrebbe contenere anche il percorso Java. Molti programmi Java e non Java, inclusi i popolari sistemi di compilazione Java Maven e Gradle , generano errori se non impostati correttamente.

Se JAVA_HOMEnon esiste, crearlo come nuova variabile di ambiente di sistema. Impostalo sul percorso della directory Java senza la bin/directory, ad es C:\Program Files\Java\jdkxxxx\.

Ricorda di modificare anche JAVA_HOMEdopo aver aggiornato Java.

Chiudi e riapri il prompt dei comandi

Sebbene tu abbia modificato PATH, tutti i programmi in esecuzione, incluso cmd, vedono solo il vecchio PATH. Questo perché l'elenco di tutte le variabili di ambiente viene copiato in un programma solo quando inizia l'esecuzione; in seguito consulta solo la copia cache.

Non esiste un buon modo per aggiornare le variabili di ambiente di cmd , quindi è sufficiente chiudere il prompt dei comandi e aprirlo di nuovo. Se si utilizza un IDE, chiuderlo e riaprirlo.

Guarda anche


7
Questo ha funzionato per me, ma prima avevo provato ad aggiungere la posizione alla fine della stringa Path. Perché funziona solo all'inizio?
Eric H.

4
Grazie! questo funziona per me! @Eric H: L'aggiunta alla fine funziona per me. Da quello che ho capito, passa attraverso Path da sinistra a destra e cerca javac.exe. Quindi forse ce l'hai in qualche directory che nella parte anteriore e che javac.exe non funziona.
Dao Lam,

36
+1 per chiudere la riga di comando e riaprirla, ha funzionato per me!
Sameh Deabes,

Ha senso se sul mio computer ho versioni diverse di jdk e jre?
Aaron Liu,

Ho imparato molte cose sul sistema operativo durante l'impostazione di queste variabili e tutto il resto. grazie amico
Aniket Jadhav,

77

prova questo .. l'ho avuto anche io ma ora risolto in XP ..

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

45

Hai setsbagliato a digitare il comando: dopo hai perso la barra rovesciata C:. Dovrebbe essere:

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

1
Mi mancava questo, ma quello era il mio errore tipografico quando ho pubblicato la mia preoccupazione qui. L'ho controllato e tutto è scritto correttamente ma mi dà ancora lo stesso errore.
user987137,

1
@ user987137. Evidentemente, qualcosa non è corretto. JDK (intendiamoci - JDK non JRE) è installato nella posizione specificata - C:\Program Files (x86)\Java\jdk1.7.0? In tal caso, cosa succede se lo fai cd C:\Program Files (x86)\Java\jdk1.7.0\bine poi javac -version?
Raghuram,

3
Ho avuto lo stesso errore durante l'impostazione di JDK su Win XP anche se avevo impostato il percorso corretto. Chiudendo semplicemente il prompt dei comandi e riaprendolo, è stato risolto.
Chris J,

@ChrisJ - Questo perché il nuovo prompt dei comandi verrà avviato in una nuova sessione e quindi caricherà anche le variabili ambientali aggiornate.
ciclico

17

Eseguire quanto segue dal prompt dei comandi: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" o set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

Ho provato questo e funziona bene.


grazie, ha funzionato su Windows
Csaba il

Buona risposta. Ha funzionato per me su Windows 10
Roger,

5

Se il comando java funziona e si verificano problemi con javac. quindi prima controlla nella directory bin di jdk il file javac.exe è presente o no. Se esiste un file javac.exe, impostare JAVA_HOMEcome variabile di sistema.


3

Controlla le variabili di ambiente.

Nel mio caso avevo JAVA_HOME impostato nelle variabili di sistema e nelle variabili del mio account utente e quest'ultima era impostata su una versione errata di Java . Ho anche avuto lo stesso problema con la variabile Path.

Dopo aver eliminato JAVA_HOME dalle variabili del mio account utente e aver rimosso il percorso errato dalla variabile Path, ha funzionato correttamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.