Симптом: после установки Java 25 команда java -version всё ещё показывает старую версию, а javac не находится.
Быстрое решение: сначала проверьте фактический путь к java, javac и список JDK через java_home; не переустанавливайте Java до выяснения, какой компонент всё ещё указывает на старую среду. В большинстве случаев проблема «Mac Java 25 показывает неправильную версию» связана не с отсутствием JDK, а с настройками по умолчанию, JAVA_HOME, PATH или проекта в IDE.
Эта статья для вас, если вы уже поставили Java 25, но терминал запускает старый выпуск, javac недоступен или IntelliJ IDEA и VS Code выбирают другой JDK. Она также пригодится при обучении на школьном Mac без прав администратора или при настройке отдельной удалённой Mac-среды.
01 Сначала отделите установленный JDK от реально запускаемой Java
Установка — это появление JDK на диске. Версия по умолчанию — это программа, которую оболочка находит первой. Представьте книжный шкаф: новый учебник Java 25 уже стоит на полке, но на рабочем столе открыт старый учебник. Команда в терминале смотрит именно на «рабочий стол».
Откройте стандартный «Терминал» и выполните команды по очереди:
java -version
which java
javac -version
which javac
/usr/libexec/java_home -V
Проверяйте не только сам текст версии, но и смысл результата.
java -versionпоказывает среду запуска. Если там указан старый выпуск, текущая командаjavaне использует Java 25.which javaпоказывает путь к исполняемому файлу, который найден черезPATH. Это помогает понять, какая запись срабатывает первой.javac -versionпроверяет компилятор. Для учебных заданий одной командыjavaнедостаточно.which javacпоказывает, существует ли доступный компилятор в текущем окружении./usr/libexec/java_home -Vвыводит JDK, которые macOS распознаёт как установленные. Если в списке есть Java 25, но первая команда показывает старую версию, JDK, скорее всего, установлен, а выбор по умолчанию не переключён.
Официальная инструкция Oracle описывает установку JDK для macOS и расположение компонентов Java в каталоге /Library/Java/JavaVirtualMachines. Ориентируйтесь на документацию Oracle по установке JDK 25 на macOS, а не на случайные команды из форумов.
Поставьте отметку только после проверки:
- [ ] Java 25 видна в выводе
java_home. - [ ]
javaиjavacнаходятся через ожидаемый путь. - [ ] Версии
javaиjavacсовпадают с JDK, который вы собираетесь использовать. - [ ] Вы не запускали непонятный скрипт с правами администратора.
Остановка: если Java 25 отсутствует в списке java_home, не редактируйте PATH вслепую. Сначала проверьте, завершилась ли установка JDK и соответствует ли загружанный установщик архитектуре вашего Mac.
02 Когда `java` запускается, а `javac` отсутствует
java — это средство запуска уже скомпилированной программы. javac — компилятор, который превращает файл .java в байткод, обычно в файл .class. Для курса по Java, где вы создаёте исходники и собираете их из терминала, нужен полный JDK, а не только среда выполнения.
Минимальная проверка выглядит так:
java -version
javac -version
Если первая команда работает, а вторая отвечает command not found, возможны несколько причин:
- установлен неполный набор компонентов;
JAVA_HOMEуказывает не на JDK 25;- в
PATHнет каталогаbinвыбранного JDK; - терминал использует старую оболочку или старую запись из конфигурационного файла;
- IDE поставила или выбрала собственную среду, не связанную с вашим системным JDK.
Сначала узнайте путь к Java 25, не вписывая его вручную:
/usr/libexec/java_home -v 25
Если команда возвращает путь, временно задайте окружение только для текущего окна терминала:
export JAVA_HOME=$(/usr/libexec/java_home -v 25)
export PATH="$JAVA_HOME/bin:$PATH"
Затем проверьте:
echo "$JAVA_HOME"
java -version
javac -version
Ожидаемый результат — путь к JDK 25 и доступные команды java и javac. Сведения о назначении JDK, компиляции и первом запуске программы сверяйте с материалами Dev.java для начала работы.
Если java_home -v 25 не возвращает путь, переменные среды не исправят отсутствие JDK. В этом случае остановитесь и проверьте установщик, архитектуру и права доступа. Не удаляйте содержимое защищённых системных каталогов macOS: это не является нормальным способом переключения версий Java.
03 Как macOS выбирает Java 25 по умолчанию
Команда /usr/libexec/java_home — это штатный механизм macOS для поиска установленного JDK. Параметр -v 25 просит выбрать среду, соответствующую версии 25. Это похоже на список учебных групп: JAVA_HOME сообщает инструментам, в какую группу идти, а PATH помогает найти конкретные команды внутри неё.
Для текущего окна терминала используйте:
export JAVA_HOME=$(/usr/libexec/java_home -v 25)
export PATH="$JAVA_HOME/bin:$PATH"
Такой вариант полезен для проверки. Закройте окно терминала, откройте новое и повторите java -version. Если настройка исчезла, она была только временной.
Чтобы сохранить выбор для будущих окон, сначала узнайте используемую оболочку:
echo "$SHELL"
Для стандартной оболочки zsh настройку обычно добавляют в ~/.zshrc:
export JAVA_HOME=$(/usr/libexec/java_home -v 25)
export PATH="$JAVA_HOME/bin:$PATH"
После сохранения перечитайте файл:
source ~/.zshrc
Потом снова проверьте:
echo "$JAVA_HOME"
java -version
javac -version
Не добавляйте одинаковые строки много раз. Повторяющиеся записи могут сделать PATH трудным для диагностики, особенно если старый JDK был добавлен раньше нового.
Если вы не уверены, что изменили в конфигурации, создайте резервную копию перед правкой:
cp ~/.zshrc ~/.zshrc.before-java25
Для возврата к прежнему состоянию используйте копию:
mv ~/.zshrc.before-java25 ~/.zshrc
source ~/.zshrc
Если файл резервной копии уже существует, не перезаписывайте его автоматически. Сначала посмотрите содержимое:
grep -n "JAVA_HOME\|java_home\|PATH" ~/.zshrc
Официальная документация Oracle подтверждает использование java_home для выбора установленного JDK на Mac. Пути и синтаксис лучше сверять с актуальной инструкцией Oracle для macOS, поскольку структура установщика и требования могут обновляться.
Почему java -version не изменился после установки
Если Java 25 есть в /usr/libexec/java_home -V, но java -version показывает старый выпуск, проверьте порядок поиска:
type -a java
type -a javac
echo "$PATH"
type -a может показать несколько найденных вариантов. Старый путь в начале списка обычно объясняет несоответствие. Не заменяйте системные ссылки вручную и не удаляйте защищённые файлы. Сначала используйте JAVA_HOME и корректный порядок PATH.
Если результат команды отличается в обычном терминале и во встроенном терминале IDE, это отдельная проблема: приложения могут запускаться с другим набором переменных среды.
04 Выбор установочного пакета для Apple Silicon и Intel
Java 25 выпускается для разных архитектур macOS. Oracle отдельно указывает варианты для Apple Silicon — AArch64 — и для компьютеров Intel — x64. Нельзя надёжно определить архитектуру по названию удалённого компьютера или по внешнему виду Mac.
Проверьте процессор в меню Apple:
«Системные настройки» → «Основные» → «Об этом Mac».
Также можно выполнить:
uname -m
Типичные результаты:
arm64означает Apple Silicon;x86_64означает Intel.
Термин «Apple Silicon» описывает не модель для маркетингового списка, а архитектуру процессора, от которой зависит выбор установочного пакета. Если загрузить неподходящий вариант, установка может не пройти, приложение может запускаться некорректно, а диагностика последующих проблем станет сложнее. Oracle объясняет различие архитектур в инструкции по установке JDK 25 для macOS.
Для удалённого Mac запросите архитектуру в данных о выданной машине или проверьте её после подключения. Если у вас нет доступа к установке программ, не пытайтесь обходить ограничения школьного администратора. Попросите разрешённую среду или используйте отдельный Mac, где вы имеете право менять настройки.
05 Решение по ситуации: исправлять локальную среду или менять окружение
Используйте эту развилку до того, как потратите время на повторную установку:
- Если Java 25 видна через
java_home, аjavaзапускает старую версию, выберите Java 25 черезJAVA_HOME, затем исправьте порядокPATH. - Если
javaработает, ноjavacне найден, проверьте полный JDK и результатjava_home -v 25. Не ограничивайтесь изменением версии командыjava. - Если терминал исправлен, но IDE показывает старый JDK, настройте JDK проекта отдельно и проверьте встроенный терминал.
- Если архитектура установщика не совпадает с результатом
uname -m, остановитесь, удалите только незавершённый пользовательский установщик разрешённым способом и скачайте подходящий пакет с официальной страницы Oracle. - Если Mac принадлежит школе и у вас нет прав администратора, продолжайте только те действия, которые разрешены правилами устройства. Иначе выберите авторизованную отдельную среду.
- Если после правки конфигурации непонятно, какая строка срабатывает, вернитесь к резервной копии и меняйте одну настройку за раз.
Эта логика важнее самой команды. Она не даёт принять отсутствие javac за «старую версию Java» и не заставляет переустанавливать рабочий JDK.
В середине диагностики полезно сравнить, где именно возникает ошибка:
| Место проверки | Что должно быть видно | Если результат старый или пустой |
|---|---|---|
java -version |
Java 25 | Проверить JAVA_HOME и PATH |
javac -version |
Компилятор Java 25 | Проверить полный JDK и каталог bin |
java_home -V |
JDK 25 среди установленных | Проверить установку и архитектуру |
| IDE, JDK проекта | Выбранный JDK 25 | Изменить SDK проекта, а не только терминал |
| Повторный вход | Те же версии после открытия новой сессии | Проверить файл оболочки и права |
06 Почему IDE продолжает использовать старый JDK
Терминал, сама IDE и конкретный проект могут использовать разные Java-среды. Исправление java -version не гарантирует, что проект в IntelliJ IDEA начнёт собираться на Java 25.
Проверяйте в таком порядке:
- откройте настройки SDK или JDK проекта;
- найдите выбранную среду для проекта и модулей;
- сравните её путь с результатом
echo "$JAVA_HOME"; - проверьте настройки средства сборки, если курс использует отдельный Gradle или Maven;
- откройте встроенный терминал IDE и выполните
java -versionиjavac -version.
JetBrains разделяет SDK проекта и другие параметры структуры проекта. Поэтому сверяйтесь с описанием SDK в IntelliJ IDEA и документацией по настройкам проекта и модулей.
Не нужно превращать эту проверку в полную инструкцию по IntelliJ IDEA или VS Code. Ваша задача — найти расхождение. Если обычный терминал показывает Java 25, встроенный терминал — старую версию, изучите профиль оболочки и способ запуска IDE. Документация JetBrains по встроенному терминалу помогает проверить, какую оболочку приложение открывает.
Создайте минимальный файл:
public class Main {
public static void main(String[] args) {
System.out.println("Java environment is ready");
System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("java.home"));
}
}
Сохраните его как Main.java. Затем в терминале выполните:
javac Main.java
java Main
Ожидаемый результат — сообщение программы, версия текущей Java и путь к используемому окружению. Если компиляция проходит, но IDE выдаёт другую версию, проблема находится в настройках проекта или IDE. Если javac Main.java не проходит, возвращайтесь к проверке JDK и JAVA_HOME.
Важно: не копируйте команды, которые удаляют каталоги Java, изменяют защищённые системные ссылки или отключают безопасность macOS. Для учебной среды это неоправданный риск: сначала восстановите понятную конфигурацию, а затем повторите проверку.
07 Финальная приёмка среды перед учебным проектом
Не считайте настройку завершённой только потому, что одна команда показала правильный выпуск. Пройдите весь короткий сценарий:
- [ ]
uname -mсовпадает с архитектурой установленного пакета. - [ ]
/usr/libexec/java_home -Vпоказывает Java 25. - [ ]
echo "$JAVA_HOME"указывает на выбранный JDK. - [ ]
java -versionпоказывает Java 25. - [ ]
javac -versionпоказывает компилятор Java 25. - [ ]
javac Main.javaзавершается без ошибки. - [ ]
java Mainзапускает первый учебный класс. - [ ] после закрытия и повторного открытия терминала результат не откатывается.
- [ ] файл
Main.javaи созданный.classнаходятся в ожидаемой папке проекта. - [ ] IDE запускает тот же проект с тем же JDK, что и терминал.
Если вы работаете на школьном устройстве без администратора, остановитесь при запросе запрещённых прав. Не обходите управление компьютером. Попросите преподавателя установить JDK или предоставить отдельную учётную запись.
Если локальная среда накопила несколько конфликтующих конфигураций, разумно сначала создать чистое разрешённое окружение. Для студентов, которым требуется отдельный Mac для практики, полезно заранее прочитать руководство CALMVPS по подключению к удалённому Mac и сопоставить его с требованиями курса. После подключения всё равно выполните приведённую выше приёмку: удалённый доступ не отменяет проверку java, javac, IDE и сохранения файлов.
Тем, кто сравнивает разные форматы доступа, пригодится обзор вариантов аренды Mac у CALMVPS. Смысл не в том, чтобы переносить каждый проект на удалённую машину, а в том, чтобы получить независимую точку сравнения, когда школьные ограничения или повреждённый профиль мешают понять источник ошибки.
Когда переустановка действительно оправдана
Переустановка имеет смысл только после диагностики. Рассматривайте её, если Java 25 не появляется в java_home, установщик завершился с ошибкой или пакет не соответствует архитектуре Mac. Перед этим сохраните учебные проекты и запишите текущие строки JAVA_HOME и PATH.
Если JDK 25 уже виден системе, а ошибка ограничена терминалом или IDE, повторная установка обычно не устраняет причину. Сначала исправьте выбор версии и проверьте минимальный файл. Это быстрее и безопаснее, чем создавать ещё одну копию JDK поверх уже существующих.
Несколько версий Java могут сосуществовать. Для этого не требуется удалять старые JDK. Выбирайте нужную версию через java_home, а проект закрепляйте за конкретным SDK. В курсе, рассчитанном на другой выпуск, не меняйте настройки без проверки требований преподавателя.
08 Что выбрать для дальнейшего обучения
Если ваш текущий Mac позволяет установить JDK и у вас есть разрешение менять профиль оболочки, локальная среда удобна для постоянной работы. Вы контролируете файлы, IDE и настройки, но сами отвечаете за обновления и порядок версий.
Если компьютер ограничен правилами школы, не пытайтесь превращать его в личную среду. Подготовьте проект в разрешённой папке, согласуйте установку с администратором или работайте на отдельной машине. Веб-терминал может помочь с простыми упражнениями, но он не заменяет полноценную проверку локального JDK, когда курс требует IDE и компиляцию на Mac.
Если проблема повторяется на удалённой машине, сначала зафиксируйте архитектуру, список JDK и результат финальной приёмки. После этого сохраните Main.java, настройки проекта и инструкцию подключения. Так при следующем сеансе вы сможете отличить ошибку доступа от ошибки Java.
Текущая среда — школьный компьютер, виртуальная машина или случайно настроенный общий Mac — часто создаёт одни и те же препятствия: нет прав администратора, версии Java смешаны, IDE запускается с другим SDK, а после выхода настройки теряются. Для разовой практики и проверки курса аренда удалённого Mac у CALMVPS может быть понятнее: вы получаете отдельную среду, не меняете защищённый школьный компьютер и можете повторить проверку на чистой конфигурации. Это не лучший вариант для каждого постоянного проекта — при длительной непрерывной нагрузке или необходимости физических устройств локальный Mac практичнее. Но для временного обучения, исправления конфликта и запуска учебного проекта отдельная Mac-среда часто экономит больше времени, чем бесконечная борьба с чужими ограничениями.
Сохраните этот материал как runbook: при следующей ошибке начинайте с java_home, затем проверяйте JAVA_HOME, PATH, javac, архитектуру и JDK проекта. Не переустанавливайте Java, пока не установлено, какой именно слой использует старую версию.