Как изменить версию Java (JDK) по умолчанию на macOS?
Пошаговое руководство по управлению версиями Java на macOS
Проблема с переключением версий JDK на macOS — одна из самых частых у начинающих разработчиков. macOS использует утилиту /usr/libexec/java_home для управления Java. Давайте разберем правильное решение.
Шаг 1: Проверьте установленные версии JDK
Сначала узнайте, какие версии Java реально установлены:
/usr/libexec/java_home -V
Вы увидите список вроде:
Matching Java Virtual Machines (3):
21.0.1 (arm64) "Oracle Corporation" - "Java SE 21.0.1" /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
17.0.9 (arm64) "Oracle Corporation" - "Java SE 17.0.9" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
11.0.21 (arm64) "Oracle Corporation" - "Java SE 11.0.21" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
Шаг 2: Правильная настройка JAVA_HOME
Откройте файл конфигурации вашей оболочки. Если используете Zsh (стандартная оболочка в macOS с Catalina и новее):
nano ~/.zshrc
Добавьте в конец файла следующие строки:
# Установка Java 17 по умолчанию
export JAVA_HOME=$(/usr/libexec/java_home -v 17)
export PATH=$JAVA_HOME/bin:$PATH
Сохраните файл (Ctrl+O, Enter, Ctrl+X) и примените изменения:
source ~/.zshrc
Шаг 3: Проверьте результат
Теперь проверьте:
java -version
Должно показать Java 17. Если всё ещё видите Java 11 — проверьте, нет ли других настроек в ~/.bash_profile или ~/.profile, которые переопределяют JAVA_HOME.
Шаг 4: Быстрое переключение между версиями (для продвинутых)
Добавьте в ~/.zshrc функцию для быстрого переключения:
function setjdk() {
if [ $# -ne 1 ]; then
echo "Usage: setjdk <version>"
return 1
fi
export JAVA_HOME=$(/usr/libexec/java_home -v $1)
export PATH=$JAVA_HOME/bin:$PATH
java -version
}
Теперь можно переключаться командой: setjdk 21
Проверка компиляции вашего кода
После настройки проверьте ваш sealed-класс:
javac TestSealed.java
java TestSealed
Ошибка должна исчезнуть. Если IntelliJ IDEA всё ещё использует старую версию — зайдите в File → Project Structure → SDK и выберите JDK 17 вручную.
Важные замечания
- Homebrew: Если устанавливали JDK через
brew install openjdk@17, путь может быть другим:/usr/local/opt/openjdk@17 - Maven/Gradle: В файлах
pom.xmlилиbuild.gradleтоже нужно указыватьsource/targetверсию - Переменная среды: Если вы используете Bash вместо Zsh, редактируйте
~/.bash_profile
После всех настроек перезапустите терминал или выполните source ~/.zshrc — и ваш проект будет использовать Java 17 по умолчанию.
Альтернативный подход: Использование jEnv для управления JDK
Если вам нужно часто переключаться между версиями Java для разных проектов, рекомендую установить менеджер версий jEnv. Он работает аналогично nvm для Node.js или rvm для Ruby.
Установка jEnv через Homebrew
brew install jenv
Добавьте в ~/.zshrc:
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"
Добавление JDK в jEnv
# Добавляем все установленные JDK
jenv add /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
# Устанавливаем глобальную версию по умолчанию
jenv global 17
# Для конкретной папки проекта:
cd /path/to/project
jenv local 21
Преимущества jEnv
- Автоматически переключает версию Java при входе в папку проекта
- Работает с Gradle, Maven, IntelliJ IDEA
- Позволяет управлять не только JDK, но и JAVA_HOME, JAVA_OPTS
- Поддерживает плагины (например, для Maven)
После настройки jEnv ваш sealed-класс будет компилироваться с правильной версией Java автоматически, без ручного экспорта переменных.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги
Обработка ошибок в TypeScript: try/catch и продвинутые методы