Как установить или изменить версию Java (JDK) по умолчанию в macOS?
Как можно изменить версию Java по умолчанию на Mac?
Переведено автоматически
Ответ 1
Первый запуск /usr/libexec/java_home -V
, который выдаст что-то вроде следующего:
Matching Java Virtual Machines (3):
1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
Выберите версию, которую вы хотите использовать по умолчанию (1.6.0_65-b14-462
для аргументации), затем:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
или вы можете указать только основную версию, например:
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…
в файл инициализации вашей командной строки.
Для Bash (как указано antonyh):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Для Fish (как указано ormurin)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
Обновление файла .zshrc должно сработать:
nano ~/.zshrc
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0)
Нажмите CTRL + X, чтобы выйти из редактора
Нажмите Y, чтобы сохранить изменения
source ~/.zshrc
echo $JAVA_HOME
java -version
Ответ 2
Этот ответ является попыткой решить: как контролировать версию java в масштабах всей системы (не только в текущей командной оболочке), когда несколько версий JDK установлены для целей разработки на macOS El Capitan или новее (Sierra, High Sierra, Mojave). Насколько я могу судить, ни один из текущих ответов этого не делает (*).
Как разработчик, я использую несколько JDK и хочу легко переключаться с одного на другой. Обычно у меня есть последняя стабильная версия для общего использования, а другие - для тестов. Но я не хочу, чтобы система (например, когда я запускаю свою IDE) использовала последнюю версию "раннего доступа", которая у меня есть на данный момент. Я хочу контролировать систему по умолчанию, и она должна быть последней стабильной версией.
Следующий подход работает, по крайней мере, с Java 7-12 (ранний доступ на момент написания этой статьи), с Oracle JDK или OpenJDK (включая сборки AdoptOpenJDK, выпущенные после середины октября 2018 г.).
Решение без сторонних инструментов:
- оставьте все 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:
$ brew untap AdoptOpenJDK/openjdk
если у вас не установлен Homebrew.
1 - Установите Homebrew.
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2 - Как загрузить последнюю версию Jave (16):
$ brew install --cask temurin
3 - Для установки других версий:
$ brew tap homebrew/cask-versions
$ brew install --cask temurin8
$ brew install --cask temurin11
$ brew install --cask temurin17
$ brew install --cask temurin18
$ brew install --cask temurin19
$ brew install --cask temurin21
4 - Переключение между различными версиями Java
Переключаясь между различными версиями Java, вам нужно всего лишь добавить следующее в свой .bash_profile
или .zshrc
.
В этом случае мы хотим иметь возможность переключаться между Java8, Java11, Java17 ... и Java21:
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_17_HOME=$(/usr/libexec/java_home -v17)
export JAVA_18_HOME=$(/usr/libexec/java_home -v18)
export JAVA_19_HOME=$(/usr/libexec/java_home -v19)
export JAVA_21_HOME=$(/usr/libexec/java_home -v21)
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:
1 - Установите Homebrew.
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2. Установите Homebrew Cask.
$ brew tap homebrew/cask-versions
$ brew update
$ brew tap homebrew/cask
3 - Install the latest version of Java
$ brew cask install java
4 - Установите другие необходимые версии Java (Java8, Java11, Java13).
$ brew tap adoptopenjdk/openjdk
$ brew cask install adoptopenjdk8
$ brew cask install adoptopenjdk11
$ brew cask install adoptopenjdk13
$ brew cask install adoptopenjdk14
5 . Переключение между различными версиями Java
Переключаясь между различными версиями Java, вам нужно всего лишь добавить следующее в свой .bash_profile
или .zshrc
.
В этом случае мы хотим иметь возможность переключаться между Java8, Java11, Java13 и Java14:
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)
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.
$ java8
$ java -version
java version "1.8.0_261"
Для получения дополнительной информации вы можете прочитать этот пост: Как использовать Brew для установки Java на Mac