Вопрос-ответ

javac is not recognized as an internal or external command, operable program or batch file [closed]

javac не распознается как внутренняя или внешняя команда, работоспособная программа или пакетный файл

Я испытываю ошибку при попытке скомпилировать программы Java.

Я использую Windows (это специфичная для Windows проблема), и у меня установлен последний JDK.

Я попытался решить проблему с использованием PATH переменной, но ошибка сохраняется.

Вывод на консоль:

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.
Переведено автоматически
Ответ 1

TL;DR

Для опытных читателей:


  1. Найдите путь к Java; это выглядит следующим образом: C:\Program Files\Java\jdkxxxx\bin\

  2. В меню "Пуск" найдите "переменная среды", чтобы открыть диалоговое окно параметров.

  3. Проверьте PATH. Удалите старые пути Java.

  4. Добавьте новый путь Java к PATH.

  5. РедактироватьJAVA_HOME.

  6. Закройте и повторно откройте консоль / IDE.


Добро пожаловать!

Вы столкнулись с одной из самых известных технических проблем, с которыми сталкиваются новички в Java: 'xyz' is not recognized as an internal or external command... сообщение об ошибке.

В двух словах, вы неправильно установили Java. Завершение установки Java в Windows требует некоторых действий вручную. Вы всегда должны выполнять эти шаги после установки Java, в том числе после обновления JDK.

Переменные среды и PATH

(Если вы уже поняли это, не стесняйтесь пропустить следующие три раздела.)

При запуске javac HelloWorld.java cmd должен определить, где javac.exe находится. Это достигается с помощью PATH переменной окружения.

Переменная окружения представляет собой специальную пару ключ-значение (например, windir=C:\WINDOWS). Большинство из них поставляется с операционной системой, а некоторые необходимы для правильного функционирования системы. Их список передается каждой программе (включая cmd) при ее запуске. В Windows существует два типа: пользовательские переменные окружения и системные переменные окружения.

Вы можете видеть свои переменные среды следующим образом:

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

Наиболее важной переменной является PATH. Это список путей, разделенных ;. Когда команда вводится в cmd, каждый каталог в списке будет проверен на наличие соответствующего исполняемого файла.

On my computer, PATH is:

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

When you run javac HelloWorld.java, cmd, upon realizing that javac is not an internal command, searches the system PATH followed by the user PATH. It mechanically enters every directory in the list, and checks if javac.com, javac.exe, javac.bat, etc. is present. When it finds javac, it runs it. When it does not, it prints 'javac' is not recognized as an internal or external command, operable program or batch file.

You must add the Java executables directory to PATH.

JDK vs. JRE

(If you already understand this, feel free to skip this section.)

When downloading Java, you are offered a choice between:


  • The Java Runtime Environment (JRE), which includes the necessary tools to run Java programs, but not to compile new ones – it contains java but not javac.

  • The Java Development Kit (JDK), which contains both java and javac, along with a host of other development tools. The JDK is a superset of the JRE.

You must make sure you have installed the JDK. If you have only installed the JRE, you cannot execute javac because you do not have an installation of the Java compiler on your hard drive. Check your Windows programs list, and make sure the Java package's name includes the words "Development Kit" in it.

Don't use set

(If you weren't planning to anyway, feel free to skip this section.)

Several other answers recommend executing some variation of:

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

Do not do that. There are several major problems with that command:


  1. This command erases everything else from PATH and replaces it with the Java path. After executing this command, you might find various other commands not working.

  2. Your Java path is probably not C:\Program Files\Java\jdk1.7.0_09\bin – you almost definitely have a newer version of the JDK, which would have a different path.

  3. The new PATH only applies to the current cmd session. You will have to reenter the set command every time you open Command Prompt.

Points #1 and #2 can be solved with this slightly better version:

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

But it is just a bad idea in general.

Find the Java path

The right way begins with finding where you have installed Java. This depends on how you have installed Java.

Exe installer

You have installed Java by running a setup program. Oracle's installer places versions of Java under C:\Program Files\Java\ (or C:\Program Files (x86)\Java\). With File Explorer or Command Prompt, navigate to that directory.

Each subfolder represents a version of Java. If there is only one, you have found it. Otherwise, choose the one that looks like the newer version. Make sure the folder name begins with jdk (as opposed to jre). Enter the directory.

Then enter the bin directory of that.

You are now in the correct directory. Copy the path. If in File Explorer, click the address bar. If in Command Prompt, copy the prompt.

The resulting Java path should be in the form of (without quotes):

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

Zip file

You have downloaded a .zip containing the JDK. Extract it to some random place where it won't get in your way; C:\Java\ is an acceptable choice.

Then locate the bin folder somewhere within it.

You are now in the correct directory. Copy its path. This is the Java path.

Remember to never move the folder, as that would invalidate the path.

Open the settings dialog

That is the dialog to edit PATH. There are numerous ways to get to that dialog, depending on your Windows version, UI settings, and how messed up your system configuration is.

Try some of these:


  • Start Menu/taskbar search box » search for "environment variable"

  • Win + R » control sysdm.cpl,,3

  • Win + R » SystemPropertiesAdvanced.exe » Environment Variables

  • File Explorer » type into address bar Control Panel\System and Security\System » Advanced System Settings (far left, in sidebar) » Environment Variables

  • Desktop » right-click This PC » Properties » Advanced System Settings » Environment Variables

  • Start Menu » right-click Computer » Properties » Advanced System Settings » Environment Variables

  • Control Panel (icon mode) » System » Advanced System Settings » Environment Variables

  • Control Panel (category mode) » System and Security » System » Advanced System Settings » Environment Variables

  • Desktop » right-click My Computer » Advanced » Environment Variables

  • Панель управления » Системные » Дополнительные " Переменные среды

Любой из этих способов должен привести вас к нужному диалоговому окну настроек.

Если вы используете Windows 10, Microsoft предоставила вам новый причудливый пользовательский интерфейс для редактирования PATH. В противном случае вы увидите PATH во всей красе, украшенной точками с запятой, втиснутую в однострочное текстовое поле. Сделайте все возможное, чтобы внести необходимые изменения, не нарушая работу вашей системы.

Очистить PATH

Посмотрите на PATH. У вас почти наверняка есть две PATH переменные (из-за различий между пользовательскими и системными переменными среды). Вам нужно посмотреть на них обе.

Проверьте наличие других путей Java и удалите их. Их существование может вызвать всевозможные конфликты. (Например, если у вас есть JRE 8 и JDK 11 в PATH таком порядке, то javac вызовет компилятор Java 11, который создаст .class файлы версии 55, но java вызовет JVM Java 8, которая поддерживает только до версии 52, и вы столкнетесь с ошибками неподдерживаемой версии и не сможете скомпилировать и запустить какие-либо программы.) Обойдите эти проблемы, убедившись, что у вас есть только один путь Java в PATH. И пока вы этим занимаетесь, вы также можете удалить старые версии Java. И помните, что вам не обязательно иметь как JDK, так и JRE.

Если у вас есть C:\ProgramData\Oracle\Java\javapath, удалите и это. Oracle намеревалась решить проблему разрыва путей Java после обновлений, создав символическую ссылку, которая всегда указывала бы на последнюю версию установки Java. К сожалению, часто в конечном итоге он указывает на неправильное местоположение или просто не работает. Лучше удалить эту запись и вручную управлять Java path.

Сейчас также есть хорошая возможность выполнить общую уборку на PATH. Если у вас есть пути, относящиеся к программному обеспечению, которое больше не установлено на вашем ПК, вы можете удалить их. Вы также можете изменить порядок следования путей (если вас интересуют подобные вещи).

Добавить в PATH

Теперь возьмите путь Java, который вы нашли три шага назад, и поместите его в систему PATH.

Не должно иметь значения, куда в списке ведет ваш новый путь; размещение его в конце - прекрасный выбор.

Если вы используете пользовательский интерфейс до Windows 10, убедитесь, что вы правильно расставили точки с запятой. Между каждым путем в списке должна быть ровно одна.

Здесь действительно больше нечего сказать. Просто добавьте путь к PATH и нажмите OK.

Установить JAVA_HOME

Пока вы этим занимаетесь, вы также можете установить JAVA_HOME. Это еще одна переменная окружения, которая также должна содержать путь Java. Многие программы на Java и не-Java, включая популярные системы сборки Java Maven и Gradle, будут выдавать ошибки, если они установлены неправильно.

Если JAVA_HOME не существует, создайте его как новую системную переменную окружения. Задайте для него путь к каталогу Java без bin/ каталога, т.е. C:\Program Files\Java\jdkxxxx\.

Не забудьте отредактировать JAVA_HOME и после обновления Java.

Закройте и повторно откройте командную строку

Несмотря на внесенные вами изменения PATH, все запущенные программы, включая cmd, видят только старые PATH. Это связано с тем, что список всех переменных среды копируется в программу только тогда, когда она начинает выполняться; после этого она обращается только к кэшированной копии.

Нет хорошего способа обновить переменные окружения cmd, поэтому просто закройте командную строку и откройте ее снова. Если вы используете IDE, закройте и повторно откройте и ее тоже.

Смотрите также

Ответ 2

попробуйте это.. У меня это тоже было, но теперь это решено в XP..

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

Вы неправильно ввели set команду – вы пропустили обратную косую черту после C:. Это должно быть:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Ответ 4

Выполните следующее из командной строки для установленной вами версии Java:

set Path="C:\Program Files\Java\jdk1.7.0_09\bin"

или

set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

Я пробовал это, и это работает хорошо.

java