Вопрос-ответ

How to set or change the default Java (JDK) version on macOS?

Как установить или изменить версию 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

java