Při pokusu o kompilaci programů v jazyce Java dochází k chybě.
Používám Windows (jedná se o problém specifický pro Windows) a mám nainstalovaný nejnovější JDK.
Pokusil jsem se o řešení zahrnující proměnnou PATH
, ale chyba přetrvává.
Výstup konzoly:
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.
Pro zkušené čtenáře:
PATH
. Odstraňte staré cesty k Javě.PATH
přidejte novou cestu Java.JAVA_HOME
.Vítejte!
Setkali jste se s jedním z nejznámějších technických problémů, s nimiž se setkávají začátečníci v jazyce Java: chybové hlášení 'xyz' není rozpoznán jako interní nebo externí příkaz...
.
Stručně řečeno, nemáte správně nainstalovanou Javu. Dokončení instalace Javy v systému Windows vyžaduje několik ručních kroků. Tyto kroky musíte provést vždy po instalaci Javy, včetně aktualizace JDK.
PATH
(Pokud jste již porozuměli, následující tři části klidně přeskočte) (Pokud jste již porozuměli, následující tři části klidně přeskočte).
Když spustíte javac HelloWorld.java
, musí cmd určit, kde se nachází javac.exe
. K tomu slouží proměnná prostředí PATH
.
Proměnná prostředí je speciální dvojice klíč-hodnota (např. windir=C:\WINDOWS
). Většina z nich je dodávána s operačním systémem a některé jsou vyžadovány pro správnou funkci systému. Jejich seznam je předáván každému programu (včetně cmd) při jeho spuštění. V systému Windows existují dva typy: proměnné prostředí uživatele a proměnné prostředí systému.
Proměnné prostředí můžete zobrazit takto:
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
...
Nejdůležitější proměnnou je PATH
. Je to seznam cest oddělených znakem ;
. Při zadání příkazu do cmd se každý adresář v seznamu prohledá, zda v něm není odpovídající spustitelný soubor.
Na mém počítači je PATH
následující:
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
Když spustíte javac HelloWorld.java
, cmd po zjištění, že javac
není interní příkaz, prohledá systémový PATH
následovaný uživatelským PATH
. Mechanicky vstoupí do každého adresáře v seznamu a zkontroluje, zda se v něm nachází javac.com
, javac.exe
, javac.bat
atd.. Když najde javac
, spustí jej. Když nenajde, vypíše 'javac' není rozpoznán jako interní nebo externí příkaz, spustitelný program nebo dávkový soubor.
Adresář se spustitelnými soubory jazyka Java musíte přidat do PATH
.
(Pokud tomu již rozumíte, tuto část klidně přeskočte.) Při stahování Javy je vám nabídnuta volba mezi:
java
, ale ne javac
.javu
, tak javac
a řadu dalších vývojových nástrojů. JDK je nadmnožinou JRE.
Musíte se ujistit, že máte nainstalován JDK. Pokud jste nainstalovali pouze JRE, nemůžete spustit javac
, protože nemáte na pevném disku nainstalovaný kompilátor Javy. Zkontrolujte seznam programů systému Windows a ujistěte se, že název balíku Java'obsahuje slova "Development Kit".set
(Pokud jste to stejně neměli v plánu, klidně tuto část přeskočte.). Několik dalších odpovědí doporučuje provést nějakou variantu:
C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin
To nedělejte. S tímto příkazem je několik zásadních problémů:
PATH
a nahradí ji cestou k Javě. Po provedení tohoto příkazu se může stát, že nebudou fungovat různé další příkazy.C:\Program Files\Java\jdk1.7.0_09\bin
- téměř určitě máte novější verzi JDK, která by měla jinou cestu.PATH
platí pouze pro aktuální relaci příkazů cmd. Při každém otevření Příkazového řádku budete muset znovu zadat příkaz set
.
Body č. 1 a 2 lze vyřešit pomocí této o něco lepší verze:C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%
Ale obecně je to prostě špatný nápad.
Správný postup začíná zjištěním, kde máte nainstalovanou Javu. To závisí na tom, jak jste Javu nainstalovali.
Javu jste nainstalovali spuštěním instalačního programu. Instalační program společnosti Oracle umisťuje verze Javy do složky C:\Program Files\Java\
(nebo C:\Program Files (x86)\Java\
). Pomocí Průzkumníka souborů nebo Příkazového řádku přejděte do tohoto adresáře.
Každá podsložka představuje verzi jazyka Java. Pokud je zde pouze jedna, našli jste ji. V opačném případě vyberte tu, která vypadá jako novější verze. Ujistěte se, že název složky začíná na jdk
(na rozdíl od jre
). Zadejte adresář.
Poté zadejte adresář bin
tohoto adresáře.
Nyní jste ve správném adresáři. Zkopírujte cestu. Pokud jste v Průzkumníku souborů, klikněte na adresní řádek. Pokud v Příkazovém řádku, zkopírujte výzvu.
Výsledná cesta v jazyce Java by měla mít tvar (bez uvozovek):
C:\Program Files\Java\jdkxxxx\bin\
Stáhli jste soubor .zip obsahující JDK. Rozbalte jej na nějaké náhodné místo, kde vám nebude překážet; přijatelnou volbou je C:\Java\
.
Pak v něm někde najděte složku bin
.
Nyní jste ve správném adresáři. Zkopírujte jeho cestu. Toto je cesta k Javě.
Nezapomeňte složku nikdy nepřesouvat, protože by se tím cesta zneplatnila.
Toto je dialogové okno pro úpravu PATH
. Existuje mnoho způsobů, jak se k tomuto dialogu dostat, v závislosti na verzi systému Windows, nastavení uživatelského rozhraní a na tom, jak moc je konfigurace systému zpřeházená.
Vyzkoušejte některé z nich:
kontrola sysdm.cpl,,3
SystemPropertiesAdvanced.exe
» Proměnné prostředíOvládací panely\Systém a zabezpečení\Systém
» Rozšířená nastavení systému (zcela vlevo, v postranním panelu) » Proměnné prostředíPATH
. V opačném případě uvidíte PATH
v plné kráse se středníky, vtěsnaný do jednořádkového textového pole. Snažte se provést potřebné úpravy, aniž byste si rozbili systém.PATH
Podívejte se na PATH
. Téměř určitě máte dvě proměnné PATH
(kvůli uživatelským a systémovým proměnným prostředí). Musíte se podívat na obě.
Zkontrolujte, zda v ní nejsou další cesty k Javě, a odstraňte je. Jejich existence může způsobit nejrůznější konflikty. (Například pokud máte v PATH
JRE 8 a JDK 11 v tomto pořadí, pak javac
vyvolá kompilátor Javy 11, který vytvoří soubory .class
verze 55, ale java
vyvolá JVM Javy 8, který podporuje pouze verzi 52, a vy se setkáte s unsupported version errors a nebudete moci zkompilovat a spustit žádný program.) Těmto problémům se vyhněte tím, že se ujistíte, že máte v PATH
pouze jednu cestu k Javě. A když už jste v tom, můžete také odinstalovat staré verze Javy. A nezapomeňte, že nemusíte mít jak JDK, tak JRE.
Pokud máte C:\ProgramData\Oracle\Java\javapath
, odstraňte i ten. Společnost Oracle zamýšlela vyřešit problém s přerušením cesty k Jave po aktualizaci vytvořením symbolického odkazu, který by vždy ukazoval na nejnovější instalaci Javy. Bohužel často končí tak, že ukazuje na špatné umístění nebo prostě nefunguje. Je lepší tuto položku odstranit a cestu k Javě spravovat ručně.
Nyní je také vhodná příležitost provést obecný úklid v PATH
. Pokud máte cesty vztahující se k softwaru, který již není na vašem počítači nainstalován, můžete je odstranit. Můžete také zamíchat pořadím cest (pokud vám na takových věcech záleží).
PATH
Nyní vezměte cestu k Javě, kterou jste našli před třemi kroky, a umístěte ji do systémového PATH
.
Nemělo by záležet na tom, kam v seznamu novou cestu umístíte; umístění na konec je dobrá volba.
Pokud používáte uživatelské rozhraní před systémem Windows 10, ujistěte se, že jste středníky umístili správně. Každou cestu v seznamu by měl oddělovat přesně jeden.
Tady už opravdu není moc co říct. Jednoduše přidejte cestu do PATH
a klikněte na OK.
JAVA_HOME
Když už jste v tom, můžete také nastavit JAVA_HOME
. Jedná se o další proměnnou prostředí, která by měla rovněž obsahovat cestu k Javě. Mnoho javovských i nejjavovských programů, včetně populárního javovského build systému Gradle, vyhodí chybu, pokud není správně nastavena.
Pokud JAVA_HOME
neexistuje, vytvořte ji jako novou systémovou proměnnou prostředí. Nastavte ji na stejnou cestu k jazyku Java, kterou jste přidali do PATH
.
Nezapomeňte upravit JAVA_HOME
také po aktualizaci Javy.
Přestože jste změnili PATH
, všechny spuštěné programy včetně cmd vidí pouze starou PATH
. Je to proto, že seznam všech proměnných prostředí se do programu zkopíruje až při zahájení jeho provádění; poté program konzultuje pouze kopii uloženou v mezipaměti.
Neexistuje žádný dobrý způsob, jak obnovit cmd'proměnné prostředí, takže jednoduše zavřete Příkazový řádek a otevřete jej znovu. Pokud používáte IDE, zavřete a znovu otevřete také toto prostředí.
Pokud příkaz java funguje a máte problém s javacem, pak nejprve zkontrolujte, zda je v adresáři bin souboru jdk soubor javac.exe.
Pokud soubor javac.exe existuje, nastavte systémovou proměnnou JAVA_HOME
.