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

253

Я испытываю ошибку при попытке компилировать программы 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.
user987137
источник
7
я думаю, что ваш путь не установлен. перейти к вашей среде и установить путь их
Рон
2
Этот вопрос кажется не по теме, потому что его легко найти в реальных инструкциях по установке JDK, и ответ там актуален и качественнее, чем любой ответ здесь. Он также доступен для всех платформ в первой главе официального руководства по началу работы .
Джейсон C
8
Да, для информации, Джейсон С. Но, признаюсь, я считаю, что решение назвать эту тему не по теме не похоже на количество других, которые поддержали этот ответ. Как я собираюсь сделать.
Мэтт Стивенс
1
Текущая ссылка: docs.oracle.com/javase/8/docs/technotes/guides/install/…
Джозеф Куинси,
Добавить новую переменную проще, и после создания новой переменной «PATH» обязательно добавьте точку с запятой (;) и конец значения.
Amir Md Amiruzzaman

Ответы:

434

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.javacmd должен определить, где 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, каждый каталог в списке будет проверяться на наличие соответствующего исполняемого файла.

На моем компьютере 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

Когда вы запускаете javac HelloWorld.java, cmd, понимая, что javacэто не внутренняя команда , ищет систему, PATHза которой следует пользовательPATH . Он механически входит в каждый каталог в списке, и проверяет javac.com, javac.exe, javac.batи т.д. присутствует. Когда он находит javac, он запускает его. Когда это не так, он печатает'javac' is not recognized as an internal or external command, operable program or batch file.

Вы должны добавить каталог исполняемых файлов Java в PATH.

JDK против JRE

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

При загрузке Java вам предлагается выбор между:

  • Java Runtime Environment (JRE), которая включает в себя инструменты , необходимые для запуска программ Java, но не компилировать новые - она содержит , javaно не javac.
  • Kit Java Development (JDK), который содержит как javaи javac, наряду с множеством других инструментов разработки. JDK является надмножеством JRE.

Вы должны убедиться, что вы установили JDK . Если вы только установили JRE, вы не сможете выполнить, javacпотому что у вас нет установленного компилятора Java на вашем жестком диске. Проверьте список программ Windows и убедитесь, что имя пакета Java содержит слова «Development Kit».

Не использовать set

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

Несколько других ответов рекомендуют выполнить некоторое изменение:

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

Не делай этого. У этой команды есть несколько серьезных проблем:

  1. Эта команда стирает все остальное от PATHи заменяет его на пути Java. После выполнения этой команды вы можете обнаружить, что другие команды не работают.
  2. Ваш Java-путь , вероятно, нет C:\Program Files\Java\jdk1.7.0_09\bin - у вас почти наверняка есть более новая версия JDK, которая будет иметь другой путь.
  3. Новое PATH относится только к текущему сеансу cmd. Вам придется вводить setкоманду каждый раз при открытии командной строки.

Точки № 1 и № 2 могут быть решены с помощью этой немного лучшей версии:

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

Но это вообще плохая идея.

Найти путь Java

Правильный путь начинается с поиска, где вы установили Java. Это зависит от того, как вы установили Java.

Exe установщик

Вы установили Java, запустив программу установки. Установщик Oracle размещает версии Java под C:\Program Files\Java\(или C:\Program Files (x86)\Java\). С помощью проводника или командной строки перейдите в этот каталог.

Каждая подпапка представляет версию Java. Если есть только один, вы нашли его. В противном случае выберите тот, который выглядит как более новая версия. Убедитесь, что имя папки начинается с jdk(в отличие от jre). Войдите в каталог.

Затем введите binкаталог этого.

Теперь вы находитесь в правильном каталоге. Скопируйте путь. Если в проводнике, щелкните адресную строку. Если в командной строке , скопируйте приглашение.

Результирующий путь Java должен быть в форме (без кавычек):

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

Почтовый файл

Вы загрузили ZIP-файл, содержащий JDK. Извлеките его в случайное место, где оно не будет вам мешать; C:\Java\это приемлемый выбор.

Затем найдите binпапку где-нибудь в нем.

Теперь вы находитесь в правильном каталоге. Скопируйте его путь. Это путь Java.

Не забудьте никогда не перемещать папку, так как это сделает недействительным путь.

Откройте диалог настроек

Это диалог для редактирования PATH . Существует множество способов получить доступ к этому диалоговому окну, в зависимости от версии Windows, настроек пользовательского интерфейса и степени испорченной конфигурации вашей системы.

Попробуйте некоторые из них:

  • Меню «Пуск» / «панель задач» »поиск« переменная среды »
  • Win + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe » Переменные среды
  • Проводник »введите в адресную строку Control Panel\System and Security\System » Расширенные настройки системы (крайняя слева, на боковой панели) »Переменные среды
  • Рабочий стол »щелкните правой кнопкой мыши на этом ПК» Свойства »Дополнительные параметры системы» Переменные среды
  • Меню Пуск »щелкните правой кнопкой мыши Компьютер» Свойства »Дополнительные параметры системы» Переменные среды
  • Панель управления (режим значков) »Система» Расширенные настройки системы »Переменные среды
  • Панель управления (режим категории) »Система и безопасность» Система »Расширенные настройки системы» Переменные среды
  • Рабочий стол »щелкните правой кнопкой мыши Мой компьютер» Дополнительно »Переменные среды
  • Панель управления »Система» Дополнительно »Переменные среды

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

Если вы работаете в 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

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

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

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

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

Устанавливать 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, закройте и снова откройте ее.

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

Карлос с.
источник
7
Это сработало для меня, но прежде чем я попытался добавить местоположение в конце строки Path. Почему это работает только в начале?
Эрик Х.
4
Спасибо! это работает для меня! @Eric H: Добавление в конце работает для меня. Насколько я понимаю, он идет по пути слева направо и ищет javac.exe. Так что, возможно, у вас есть это в какой-то директории, которая спереди и что javac.exe не работает
Дао Лам
36
+1 за закрытие командной строки и повторное ее открытие, что сработало для меня!
Самех Дибес
Имеет ли смысл иметь разные версии jdk и jre на моем компьютере?
Аарон Лю
Я многое узнал о системе ОС, когда настраивал эти переменные и все такое. спасибо мужчина
Аникет Джадхав
77

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

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java
Ахмад Азвар Анас
источник
45

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

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Raghuram
источник
1
Я пропустил это право, но это была моя опечатка, когда я разместил здесь мою проблему. Я проверил это, и все правильно написано, но все равно выдает мне ту же ошибку.
user987137
1
@ user987137. Очевидно, что-то не так. Установлен ли JDK (обратите внимание - JDK не JRE) в указанном месте - C:\Program Files (x86)\Java\jdk1.7.0? Если это так, что произойдет, если вы делаете, cd C:\Program Files (x86)\Java\jdk1.7.0\binа затем javac -version?
Рагурам
3
У меня была такая же ошибка при настройке JDK на Win XP, хотя у меня был установлен правильный путь. Просто закройте командную строку и откройте ее снова, чтобы исправить это.
Крис Джей
@ChrisJ - Это потому, что новая командная строка будет запущена в новом сеансе и, следовательно, также загрузит обновленные переменные среды.
Циклон-код
17

Запустите следующую команду из командной строки: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" или set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

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

посвежее
источник
спасибо, это работало на Windows
Csaba
Хороший ответ. Работал для меня на Windows 10
Роджер
5

Если команда Java работает и возникают проблемы с Javac. затем сначала проверьте, есть ли в каталоге bin jdk файл javac.exe или нет. Если файл javac.exe существует, установите его в JAVA_HOMEкачестве системной переменной.

Умрао Рават
источник
3

Проверьте переменные среды.

В моем случае JAVA_HOME был установлен в системных переменных, а также в переменных моей учетной записи пользователя, а последняя была установлена ​​на неправильную версию Java . У меня тоже была такая же проблема с переменной Path.

После удаления JAVA_HOME из переменных моей учетной записи пользователя и удаления неправильного пути из переменной Path он работал правильно.

wabisabit
источник