или вы можете указать только основную версию, например:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Теперь при запуске java -version вы увидите:
java version "1.6.0_65" Java(TM) SE Runtime Environment(build 1.6.0_65-b14-462-11M4609) Java HotSpot(TM)64-Bit Server VM(build 20.65-b04-462, mixed mode)
Добавьте строку export JAVA_HOME… в файл инициализации вашей командной строки.
Нажмите CTRL + X, чтобы выйти из редактора Нажмите Y, чтобы сохранить изменения
source ~/.zshrc echo $JAVA_HOME java -version
Ответ 2
Этот ответ является попыткой решить: как контролировать версию java в масштабах всей системы (не только в текущей командной оболочке), когда несколько версий JDK установлены для целей разработки на macOS El Capitan или новее (Sierra, High Sierra, Mojave). Насколько я могу судить, ни один из текущих ответов этого не делает (*).
Как разработчик, я использую несколько JDK и хочу легко переключаться с одного на другой. Обычно у меня есть последняя стабильная версия для общего использования, а другие - для тестов. Но я не хочу, чтобы система (например, когда я запускаю свою IDE) использовала последнюю версию "раннего доступа", которая у меня есть на данный момент. Я хочу контролировать систему по умолчанию, и она должна быть последней стабильной версией.
оставьте все JDK в их расположении по умолчанию, в разделе /Library/Java/JavaVirtualMachines. Система выберет самую высокую версию по умолчанию.
Чтобы исключить выбор JDK по умолчанию, переименуйте его Contents/Info.plist в Info.plist.disabled. Этот JDK все еще можно использовать, когда $JAVA_HOME указывает на него или явно ссылается в скрипте или конфигурации. Системная команда java просто проигнорирует его.
System Launcher будет использовать JDK с самой высокой версией среди тех, у которых есть Info.plist файл.
При работе в оболочке с альтернативным JDK выберите свой метод среди существующих ответов (jenv или пользовательские псевдонимы / скрипты вокруг /usr/libexec/java_home и т.д.).
(*) Текущие ответы либо устарели (больше не действительны для macOS El Capitan или Sierra), либо касаются только одного JDK, либо не затрагивают общесистемный аспект. Многие объясняют, как изменить $JAVA_HOME, но это влияет только на текущую оболочку и то, что запускается оттуда. Это не повлияет на приложение, запущенное из программы запуска ОС (если вы не измените нужный файл и не выйдете из системы / login, что утомительно). То же самое для jenv, это круто и все такое, но, насколько я могу судить, он просто изменяет переменные окружения, поэтому имеет то же ограничение.
Ответ 3
В дополнение к приведенным выше ответам я вставил следующие строки в свой .bash_profile (или .zshrc для macOS 10.15+), что делает переключение действительно удобным (включая комментарий @elektromin для java 9):
alias j20="export JAVA_HOME=`/usr/libexec/java_home -v 20`; java -version" alias j19="export JAVA_HOME=`/usr/libexec/java_home -v 19`; java -version" alias j18="export JAVA_HOME=`/usr/libexec/java_home -v 18`; java -version" alias j17="export JAVA_HOME=`/usr/libexec/java_home -v 17`; java -version" alias j16="export JAVA_HOME=`/usr/libexec/java_home -v 16`; java -version" alias j15="export JAVA_HOME=`/usr/libexec/java_home -v 15`; java -version" alias j14="export JAVA_HOME=`/usr/libexec/java_home -v 14`; java -version" alias j13="export JAVA_HOME=`/usr/libexec/java_home -v 13`; java -version" alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version" alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version" alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version" alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version" alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version" alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"
После вставки выполните $ source .bash_profile
Я могу переключиться на Java 8, введя следующее:
$ j8 java version "1.8.0_102" Java(TM) SE Runtime Environment(build 1.8.0_102-b14) Java HotSpot(TM)64-Bit Server VM(build 25.102-b14, mixed mode)
Ответ 4
Из-за нескольких Homebrew, cast (уведомление об устаревании AdoptOpenJDK / openjdk) и обновлений macOS я публикую этот обновленный ответ.
Homebrew tap AdoptOpenJDK / openjdk официально устарел в пользу бочек temurin, поставляемых непосредственно из проекта Homebrew, но Homebrew - лучший способ управлять различными версиями Java и работать с ними.
Если у вас уже установлены Homebrew и AdoptOpenJDK / openjdk cast, пожалуйста, сначала разверните этот brew tap:
alias java8='export JAVA_HOME=$JAVA_8_HOME' alias java11='export JAVA_HOME=$JAVA_11_HOME' alias java17='export JAVA_HOME=$JAVA_17_HOME' alias java18='export JAVA_HOME=$JAVA_18_HOME' alias java19='export JAVA_HOME=$JAVA_19_HOME' alias java21='export JAVA_HOME=$JAVA_21_HOME'
# default to Java 21 java21
5 - Перезагрузите .bash_profile или .zshrc, чтобы псевдонимы вступили в силу:
$ source ~/.bash_profile
или
$ source ~/.zshrc
6 - Наконец, вы можете использовать псевдонимы для переключения между различными версиями Java.
$ java8 $ java -version java version "1.8.0_261"
Старое руководство, если у вас старые версии Homebrew и macOS...
Я поделюсь своим опытом работы с macOS Big Sur версии 11.4, лучший способ справиться с этими проблемами - установить Java с помощью Homebrew:
alias java8='export JAVA_HOME=$JAVA_8_HOME' alias java11='export JAVA_HOME=$JAVA_11_HOME' alias java13='export JAVA_HOME=$JAVA_13_HOME' alias java14='export JAVA_HOME=$JAVA_14_HOME'
# default to Java 14 java14
6 - Перезагрузите .bash_profile или .zshrc, чтобы псевдонимы вступили в силу:
$ source ~/.bash_profile
или
$ source ~/.zshrc
7 - Наконец, вы можете использовать псевдонимы для переключения между различными версиями Java.