javac nie jest rozpoznawany jako wewnętrzna lub zewnętrzna komenda, program operacyjny lub plik wsadowy [zamknięty]

253

Wystąpił błąd podczas próby kompilacji programów Java.

Korzystam z systemu Windows (jest to problem specyficzny dla systemu Windows) i mam zainstalowany najnowszy pakiet JDK.

Próbowałem rozwiązania dotyczącego PATHzmiennej, ale błąd nadal występuje.

Dane wyjściowe konsoli:

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.
użytkownik987137
źródło
7
myślę, że twoja ścieżka nie jest ustalona. idź do swojej zmiennej środowiskowej i wytycz ścieżkę ich
Ron
2
To pytanie wydaje się nie na temat, ponieważ można je łatwo znaleźć w rzeczywistych instrukcjach instalacji JDK, a odpowiedź jest aktualna i lepszej jakości niż jakakolwiek odpowiedź tutaj. Jest również łatwo dostępny dla wszystkich platform w pierwszym rozdziale oficjalnego samouczka dla początkujących .
Jason C
8
Ta za informację Jason C. Ale przyznaję, że uważam, że decyzja o oderwaniu tego tematu od tematu wydaje się być sprzeczna z liczbą innych, którzy poprawili tę odpowiedź. Jak już mam to zrobić.
Matt Stevens,
Dodanie nowej zmiennej jest łatwiejsze, a po utworzeniu nowej zmiennej „PATH” upewnij się, że dodajesz średnik (;) i koniec wartości.
Amir Md Amiruzzaman,

Odpowiedzi:

434

TL; DR

Dla doświadczonych czytelników:

  1. Znajdź ścieżkę Java; To wygląda tak:C:\Program Files\Java\jdkxxxx\bin\
  2. Wyszukaj w menu Start „zmienną środowiskową”, aby otworzyć okno dialogowe opcji.
  3. Zbadać PATH. Usuń stare ścieżki Java.
  4. Dodaj nową ścieżkę Java do PATH.
  5. Edit JAVA_HOME.
  6. Zamknij i ponownie otwórz konsolę / IDE.

Witamy!

Wystąpił jeden z najbardziej znanych problemów technicznych dla początkujących użytkowników języka Java: 'xyz' is not recognized as an internal or external command...komunikat o błędzie.

Krótko mówiąc, nie zainstalowałeś poprawnie Javy . Zakończenie instalacji Java w systemie Windows wymaga ręcznych czynności. Zawsze musisz wykonać te kroki po zainstalowaniu Javy, w tym po aktualizacji JDK.

Zmienne środowiskowe i PATH

(Jeśli już to rozumiesz, możesz pominąć kolejne trzy sekcje).

Po uruchomieniu javac HelloWorld.javacmd musi ustalić, gdzie javac.exesię znajduje. Dokonuje się tego za PATHpomocą zmiennej środowiskowej.

Zmienna jest para specjalny klucz-wartość (na przykład windir=C:\WINDOWS). Większość pochodzi z systemem operacyjnym, a niektóre są wymagane do prawidłowego funkcjonowania systemu. Ich lista jest przekazywana do każdego programu (w tym cmd) podczas jego uruchamiania. W systemie Windows istnieją dwa typy : zmienne środowiskowe użytkownika i systemowe zmienne środowiskowe .

Możesz zobaczyć swoje zmienne środowiskowe w następujący sposób:

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

Najważniejszą zmienną jest PATH. Jest to lista ścieżek oddzielonych przez ;. Gdy polecenie zostanie wprowadzone do cmd, każdy katalog na liście zostanie przeskanowany w poszukiwaniu pasującego pliku wykonywalnego.

Na moim komputerze PATHjest:

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

Po uruchomieniu javac HelloWorld.javacmd, gdy zorientujesz się, że javacnie jest to polecenie wewnętrzne , przeszukuje system, PATHa następnie użytkownikaPATH . To mechanicznie wchodzi każdym katalogu na liście, i sprawdza, czy javac.com, javac.exe, javac.batitp obecny jest. Gdy znajdzie javac, uruchamia go. Kiedy nie, drukuje'javac' is not recognized as an internal or external command, operable program or batch file.

Musisz dodać katalog wykonywalny Java do PATH.

JDK vs. JRE

(Jeśli już to rozumiesz, możesz pominąć tę sekcję).

Podczas pobierania oprogramowania Java możesz wybrać między:

  • Java Runtime Environment (JRE), który zawiera narzędzia niezbędne do uruchomienia programów Java, ale nie skompilować nowe - zawiera ona javajednak nie javac.
  • Java Development Kit (JDK), który zawiera zarówno javai javac, wraz z szeregiem innych narzędzi programistycznych. JDK jest nadzbiorem środowiska JRE.

Musisz upewnić się , że zainstalowałeś JDK . Jeśli zainstalowałeś tylko środowisko JRE, nie możesz go uruchomić, javacponieważ nie masz instalacji kompilatora Java na dysku twardym. Sprawdź listę programów Windows i upewnij się, że nazwa pakietu Java zawiera słowa „Development Kit”.

Nie używaj set

(Jeśli i tak nie planujesz, możesz pominąć tę sekcję).

Kilka innych odpowiedzi zaleca wykonanie pewnej odmiany:

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

Nie rób tego. Istnieje kilka poważnych problemów z tym poleceniem:

  1. To polecenie usuwa wszystko inne od PATHi zastępuje go ze ścieżką Java. Po wykonaniu tego polecenia może się okazać, że różne inne polecenia nie działają.
  2. Twoja ścieżka Java prawdopodobnie nie jest C:\Program Files\Java\jdk1.7.0_09\bin - prawie na pewno masz nowszą wersję JDK, która miałaby inną ścieżkę.
  3. Nowe PATH dotyczy tylko bieżącej sesji cmd. Będziesz musiał ponownie wprowadzić setpolecenie za każdym razem, gdy otworzysz wiersz polecenia.

Punkty 1 i 2 można rozwiązać dzięki tej nieco lepszej wersji:

C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%

Ale ogólnie jest to po prostu zły pomysł.

Znajdź ścieżkę Java

Właściwy sposób zaczyna się od znalezienia miejsca instalacji Java. Zależy to od sposobu zainstalowania Java.

Instalator exe

Zainstalowałeś Javę, uruchamiając program instalacyjny. Instalator Oracle umieszcza wersje Java w C:\Program Files\Java\(lub C:\Program Files (x86)\Java\). Za pomocą Eksploratora plików lub wiersza polecenia przejdź do tego katalogu.

Każdy podfolder reprezentuje wersję Java. Jeśli jest tylko jeden, to go znalazłeś. W przeciwnym razie wybierz ten, który wygląda jak nowsza wersja. Upewnij się, że nazwa folderu zaczyna się od jdk(w przeciwieństwie do jre). Wejdź do katalogu.

Następnie wprowadź binkatalog tego.

Jesteś teraz we właściwym katalogu. Skopiuj ścieżkę. W Eksploratorze plików kliknij pasek adresu. W wierszu polecenia skopiuj monit.

Wynikowa ścieżka Java powinna mieć postać (bez cudzysłowów):

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

Plik zip

Pobrałeś plik .zip zawierający JDK. Wyodrębnij go w losowe miejsce, gdzie nie będzie ci przeszkadzało; C:\Java\jest akceptowalnym wyborem.

Następnie zlokalizuj binfolder gdzieś w nim.

Jesteś teraz we właściwym katalogu. Skopiuj swoją ścieżkę. To jest ścieżka Java.

Pamiętaj, aby nigdy nie przenosić folderu, ponieważ spowodowałoby to unieważnienie ścieżki.

Otwórz okno ustawień

To jest okno dialogowe do edycji PATH. Istnieje wiele sposobów, aby przejść do tego okna dialogowego, w zależności od wersji systemu Windows, ustawień interfejsu użytkownika i tego, jak popsuła się konfiguracja systemu.

Wypróbuj niektóre z nich:

  • Start Menu / pole wyszukiwania paska zadań »wyszukaj„ zmienną środowiskową ”
  • Win + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe» Zmienne środowiskowe
  • Eksplorator plików »wpisz w pasek adresu Control Panel\System and Security\System» Zaawansowane ustawienia systemu (daleko w lewo, na pasku bocznym) »Zmienne środowiskowe
  • Pulpit »kliknij prawym przyciskiem myszy na tym komputerze» Właściwości »Zaawansowane ustawienia systemu» Zmienne środowiskowe
  • Menu Start »kliknij prawym przyciskiem myszy Komputer» Właściwości »Zaawansowane ustawienia systemu» Zmienne środowiskowe
  • Panel sterowania (tryb ikon) »System» Zaawansowane ustawienia systemu »Zmienne środowiskowe
  • Panel sterowania (tryb kategorii) »System i zabezpieczenia» System »Zaawansowane ustawienia systemu» Zmienne środowiskowe
  • Pulpit »kliknij prawym przyciskiem Mój komputer» Zaawansowane »Zmienne środowiskowe
  • Panel sterowania »System» Zaawansowane »Zmienne środowiskowe

Każde z nich powinno doprowadzić cię do właściwego okna ustawień.

Jeśli korzystasz z systemu Windows 10, Microsoft pobłogosławił cię fantazyjnym nowym interfejsem do edycji PATH. W przeciwnym razie zobaczysz PATHpełną chwałę inkrustowaną średnikami, wciśniętą w jedno-wierszowe pole tekstowe. Dołóż wszelkich starań, aby dokonać niezbędnych zmian bez uszkodzenia systemu.

Czysty PATH

Patrzeć PATH. Prawie na pewno masz dwie PATHzmienne (z powodu zmiennych środowiskowych użytkownik vs. system). Musisz spojrzeć na oba.

Sprawdź inne ścieżki Java i usuń je. Ich istnienie może powodować różnego rodzaju konflikty. (Na przykład, jeśli masz JRE 8 i JDK 11 w PATHtej kolejności, to javacwywoła kompilator Java 11, który utworzy .classpliki w wersji 55 , ale javawywoła JVM Java 8, który obsługuje tylko wersję 52, i wystąpią nieobsługiwane błędy wersji i nie będzie można kompilować ani uruchamiać żadnych programów.) Pomiń te problemy, upewniając się, że masz tylko jedną ścieżkę Java PATH. A gdy już to robisz, równie dobrze możesz odinstalować stare wersje Java . I pamiętaj, że nie musisz mieć zarówno JDK, jak i JRE.

Jeśli tak C:\ProgramData\Oracle\Java\javapath, usuń to również . Oracle zamierzało rozwiązać problem zepsucia ścieżek Java po aktualizacji, tworząc symboliczne łącze , które zawsze wskazywałoby najnowszą instalację Java. Niestety często kończy się to wskazaniem niewłaściwej lokalizacji lub po prostu nie działa . Lepiej jest usunąć ten wpis i ręcznie zarządzać ścieżką Java.

Teraz jest również dobra okazja do wykonywania ogólnych prac porządkowych PATH. Jeśli masz ścieżki związane z oprogramowaniem, które nie jest już zainstalowane na komputerze, możesz je usunąć. Możesz także zmieniać kolejność ścieżek (jeśli zależy Ci na takich rzeczach).

Dodać do PATH

Teraz weź ścieżkę Java, którą znalazłeś trzy kroki temu, i umieść ją w systemie PATH.

Nie powinno mieć znaczenia, gdzie na liście zmierza twoja nowa ścieżka; umieszczenie go na końcu jest dobrym wyborem.

Jeśli używasz interfejsu użytkownika wcześniejszego niż Windows 10, upewnij się, że umieściłeś średniki poprawnie. Powinna być dokładnie jedna oddzielająca każdą ścieżkę na liście.

Naprawdę nie ma tu nic więcej do powiedzenia. Po prostu dodaj ścieżkę PATHi kliknij OK.

Zestaw JAVA_HOME

W tym momencie równie dobrze możesz ustawić JAVA_HOME. Jest to kolejna zmienna środowiskowa, która powinna również zawierać ścieżkę Java. Wiele programów Java i innych niż Java, w tym popularne systemy kompilacji Java Maven i Gradle , będą zgłaszać błędy, jeśli nie zostaną poprawnie ustawione.

Jeśli JAVA_HOMEnie istnieje, utwórz ją jako nową systemową zmienną środowiskową. Ustaw ścieżkę do katalogu Java bez bin/katalogu, tj C:\Program Files\Java\jdkxxxx\.

Pamiętaj, aby edytować również JAVA_HOMEpo aktualizacji Java.

Zamknij i ponownie otwórz wiersz polecenia

Chociaż zmodyfikowałeś PATH, wszystkie uruchomione programy, w tym cmd, widzą tylko stare PATH. Wynika to z faktu, że lista wszystkich zmiennych środowiskowych jest kopiowana do programu dopiero po uruchomieniu; następnie sprawdza tylko kopię z pamięci podręcznej.

Nie ma dobrego sposobu na odświeżenie zmiennych środowiskowych cmd , więc po prostu zamknij Wiersz polecenia i otwórz go ponownie. Jeśli używasz IDE, zamknij go i otwórz ponownie.

Zobacz też

Carlos C.
źródło
7
To działało dla mnie, ale zanim spróbowałem dodać lokalizację na końcu ciągu ścieżki. Dlaczego działa tylko na początku?
Eric H.
4
Dzięki! to działa dla mnie! @Eric H: Dodawanie na końcu działa dla mnie. Z tego, co rozumiem, przechodzi przez ścieżkę od lewej do prawej i szuka javac.exe. Więc może masz go w jakimś katalogu, który z przodu i że javac.exe nie działa.
Dao Lam
36
+1 za zamknięcie wiersza poleceń, a następnie ponowne otwarcie go, co zadziałało dla mnie!
Sameh Deabes
Czy to ma sens, jeśli mam inną wersję jdk i jre na swoim komputerze?
Aaron Liu,
Nauczyłem się wielu rzeczy na temat systemu operacyjnego podczas konfigurowania tych zmiennych i tak dalej. dzięki człowieku
Aniket Jadhav
77

spróbuj tego .. Też miałem, ale teraz rozwiązałem w XP ..

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java
Ahmad Azwar Anas
źródło
45

Źle wpisałeś setkomendę - później nie trafiłeś ukośnika C:. Powinno być:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Raghuram
źródło
1
Brakowało mi tego prawa, ale to był mój błąd typograficzny, gdy opublikowałem tutaj swoje obawy. Sprawdziłem to i wszystko jest poprawnie napisane, ale nadal wyświetla ten sam błąd.
user987137,
1
@ user987137. Najwyraźniej coś jest nie tak. Czy JDK (pamiętaj - JDK nie JRE) jest zainstalowany w określonej lokalizacji - C:\Program Files (x86)\Java\jdk1.7.0? Jeśli tak, to co się dzieje, jeśli nie cd C:\Program Files (x86)\Java\jdk1.7.0\bin, a potem javac -version?
Raghuram
3
Miałem ten sam błąd podczas konfigurowania JDK na Win XP, mimo że ustawiłem prawidłową ścieżkę. Po prostu zamknięcie wiersza polecenia i ponowne otwarcie go naprawiło.
Chris J
@ChrisJ - Dzieje się tak, ponieważ nowy wiersz polecenia zostanie uruchomiony w nowej sesji, a zatem załaduje zaktualizowane zmienne środowiskowe.
Cyclonecode
17

Uruchom następujące polecenie w wierszu polecenia: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" lub set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

Próbowałem tego i działa dobrze.

świeższy
źródło
dzięki, to działało na Windowsie
Csaba
Dobra odpowiedź. Pracował dla mnie w systemie Windows 10
Roger
5

Jeśli polecenie java działa i pojawia się problem z javac. następnie najpierw sprawdź, czy w katalogu bin jdk jest plik javac.exe. Jeśli plik javac.exe istnieje, ustaw go JAVA_HOMEjako zmienną systemową.

Umrao Rawat
źródło
3

Sprawdź zmienne środowiskowe.

W moim przypadku ustawiłem JAVA_HOME w zmiennych systemowych, a także w zmiennych mojego konta użytkownika, a ta ostatnia została ustawiona na niewłaściwą wersję Java . Miałem również ten sam problem ze zmienną Path.

Po usunięciu JAVA_HOME ze zmiennych mojego konta użytkownika i usunięciu niewłaściwej ścieżki ze zmiennej ścieżki działało to poprawnie.

wabisabit
źródło