javac není rozpoznán jako interní nebo externí příkaz, spustitelný program nebo dávkový soubor.

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.

TL;DR

Pro zkušené čtenáře:

  1. Najděte cestu k Javě; vypadá takto: C:\Program Files\Java\jdkxxxx\bin`
  2. V nabídce Start vyhledejte "proměnná prostředí" a otevřete dialogové okno možností.
  3. Prozkoumejte PATH. Odstraňte staré cesty k Javě.
  4. Do PATH přidejte novou cestu Java.
  5. Upravte JAVA_HOME.
  6. Zavřete a znovu otevřete konzolu/IDE.

    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.

    Proměnné prostředí a 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.

JDK vs. JRE

(Pokud tomu již rozumíte, tuto část klidně přeskočte.) Při stahování Javy je vám nabídnuta volba mezi:

  • Java Runtime Environment](https://en.wikipedia.org/wiki/Java_virtual_machine#Java_Runtime_Environment) (JRE), které obsahuje nástroje potřebné ke spouštění programů v Javě, ale ne ke kompilaci nových programů - obsahuje java, ale ne javac.
  • Vývojová sada Java Development Kit (JDK), která obsahuje jak 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".

    Nepoužívejte 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ů:

  1. Tento příkaz vymaže vše ostatní z 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.
  2. Vaše cesta k Javě pravděpodobně není 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.
  3. Nová 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\\bin;%PATH%

Ale obecně je to prostě špatný nápad.

Zjistěte cestu k Javě

Správný postup začíná zjištěním, kde máte nainstalovanou Javu. To závisí na tom, jak jste Javu nainstalovali.

Instalační program Exe

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\

Zip soubor

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.

Otevřete dialogové okno nastavení

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:

  • Hledejte v nabídce Start/hledacím poli hlavního panelu » hledejte "proměnná prostředí"
  • Win + R » kontrola sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe » Proměnné prostředí
  • Průzkumník souborů » zadejte do adresního řádku 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í
  • Plocha » klikněte pravým tlačítkem myši na Tento počítač » Vlastnosti » Rozšířená nastavení systému » Proměnné prostředí
  • Nabídka Start » klikněte pravým tlačítkem myši na Počítač » Vlastnosti » Rozšířená nastavení systému » Proměnné prostředí
  • Ovládací panely (režim ikon) » Systém » Rozšířená nastavení systému » Proměnné prostředí
  • Ovládací panely (režim kategorie) » Systém a zabezpečení » Systém » Rozšířená nastavení systému » Proměnné prostředí
  • Plocha » klikněte pravým tlačítkem myši na položku Můj počítač » Rozšířené » Proměnné prostředí
  • Ovládací panely » Systém » Upřesnit » Proměnné prostředí Kterákoli z těchto možností by vás měla přenést do správného dialogu nastavení. Pokud používáte systém Windows 10, společnost Microsoft vás obdařila fantastickým novým uživatelským rozhraním pro úpravu 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.

    Vyčistěte 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ží).

    Přidat do 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.

    Nastavte 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.

    Zavřete a znovu otevřete Příkazový řádek

    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í.

    Viz také

  • Co je to PATH a další proměnné prostředí a jak je mohu nastavit nebo použít?"(https://superuser.com/questions/284342/what-are-path-and-other-environment-variables-and-how-can-i-set-or-use-them).
  • [Jak nastavím nebo změním systémovou proměnnou PATH?] (https://java.com/en/download/help/path.xml).
  • Jak nastavit cestu a proměnné prostředí v systému Windows
  • Jak nastavit proměnné prostředí Path v systému Windows 10](https://www.addictivetips.com/windows-tips/set-path-environment-variables-in-windows-10/)
Komentáře (5)

Chybně jste zadal příkaz set - vynechal jste zpětné lomítko za C:. Mělo by to být:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Komentáře (4)

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.

Komentáře (0)