Как установить Java 11 на Mac OSX, позволяющую переключать версии?
Я хочу установить OpenJDK Java 11 на Mac OSX и заставить его работать вместе с другими JDK, так как это более новая версия. В настоящее время я скачал tar.gz и поместил его в мой путь, но это сложно поддерживать.
Единственные другие установки, которые я обнаружил, которые делают больше вещей автоматически, - это установка Oracle через бочонок Homebrew, но это коммерческий JDK, и мне нужен открытый код!
brew cask info java
Показывает:
Java: 11,28: 55eed80b163941c8885ad9298e6d786a https://www.oracle.com/technetwork/java/javase/overview/index.html
Какой это Oracle JDK, а не OpenJDK, см.: https://discourse.brew.sh/t/how-to-install-openjdk-with-brew/712
Следующие указания из старого вопроса ( Mac OS X и несколько версий Java) устарели и дают мне неправильную версию - Oracle, а не OpenJDK.
Обновление: по состоянию на 3 октября 2018 года бочка Homebrew теперь указывает на OpenJDK 11
11 ответов
примечание: эти решения работают для вашего конкретного случая Java 11 OpenJDK, но также работают для любой другой предыдущей версии Java, охватываемой перечисленными менеджерами версий. Это включает в себя альтернативные JDK от OpenJDK, Oracle, IBM, Azul, Amazon Correto, Graal и других. Легко работайте с Java 7, Java 8, Java 9, Java 10, Java 11 и даже с ранним доступом к Java 12!
У вас есть несколько вариантов, как выполнить установку, а также управлять переключением JDK. Установка может быть сделана Homebrew, SDKMAN, Jabba или ручной установкой. Переключение может быть выполнено с помощью JEnv, SDKMAN, Jabba или вручную, установив JAVA_HOME
, Все это описано ниже.
Монтаж
Во-первых, установите Java любым удобным для вас способом, включая Homebrew, SDKMAN или ручную установку файла tar.gz. Преимущества ручной установки заключаются в том, что расположение JDK можно разместить в стандартизированном месте для Mac OSX.
Установить с SDKMAN
Это простая модель в том смысле, что она обрабатывает как установку, так и переключение версий, с оговоркой, что она устанавливает JDK в нестандартный каталог.
< см. ниже "Установка и переключение версий с помощью SDKMAN" >
Установить с помощью Jabba
Это также простая модель, в которой установка и переключение версий выполняются одним и тем же инструментом. Установки сделаны в нестандартный каталог.
< см. ниже "Установка и переключение версий с помощью Jabba" >
Установите вручную со страницы загрузки OpenJDK:
Загрузите OpenJDK 11 для Mac OSX с http://jdk.java.net/11/ (или с ранним доступом к JDK 12 с http://jdk.java.net/12/).
Разархивируйте архив OpenJDK и поместите полученный
jdk-11.jdk
папка в вашем/Library/Java/JavaVirtualMachines/
папка, так как это стандартное и ожидаемое место установки JDK. Вы также можете установить в любом месте в реальности.
Установить с Homebrew
Версия Java, доступная в Homebrew Cask до 3 октября 2018 года, действительно была Oracle JVM. Однако теперь он был обновлен до OpenJDK. Обязательно обновите Homebrew, и тогда вы увидите последнюю версию, доступную для установки.
установите Homebrew, если вы еще этого не сделали. Убедитесь, что оно обновлено:
brew update
Добавьте кран для бочек, если вы еще этого не сделали:
brew tap homebrew/cask-versions
Ищите устанавливаемые версии:
brew search java
Проверьте информацию о версии, которая будет установлена:
brew cask info java
Примечание: до 3 октября 2018 года текущим выпуском является коммерческая версия Oracle 11 для Oracle, а после 3 октября - OpenJDK 11.
Установите конкретную версию JDK, такую как
java8
,java10
или жеjava
для текущего:brew cask install java
Версия AdoptOpenJDK теперь доступна и из Homebrew Cask:
brew cask install adoptopenjdk
И они будут установлены в /Library/Java/JavaVirtualMachines/
это традиционное расположение, ожидаемое на Mac OSX.
Другие варианты установки:
Некоторые другие разновидности openJDK:
Azul Systems Java Zulu сертифицированные сборки OpenJDK можно установить, следуя инструкциям на их сайте.
Zulu® - это сертифицированная сборка OpenJDK, полностью соответствующая стандарту Java SE. Zulu на 100% с открытым исходным кодом и свободно загружается. Теперь разработчики Java, системные администраторы и конечные пользователи могут пользоваться всеми преимуществами Java с открытым исходным кодом, гибкостью развертывания и контролем времени обновления.
Сборки Amazon Correto OpenJDK имеют простой в использовании установочный пакет для версии 8 (будут выпущены другие версии) и устанавливаются в соответствии со стандартом. /Library/Java/JavaVirtualMachines/
каталог на Mac OSX.
Amazon Corretto - это бесплатный, многоплатформенный, готовый к работе дистрибутив Open Java Development Kit (OpenJDK). Corretto поставляется с долгосрочной поддержкой, которая будет включать улучшения производительности и исправления безопасности. Amazon запускает Corretto внутри компании на тысячах производственных сервисов, и Corretto сертифицирована как совместимая со стандартом Java SE. С Corretto вы можете разрабатывать и запускать приложения Java на популярных операционных системах, включая Amazon Linux 2, Windows и macOS.
Где мой JDK?!?!
Чтобы найти местоположения ранее установленных Java JDK, установленных в расположениях системы по умолчанию, используйте:
/usr/libexec/java_home -V
Соответствие виртуальных машин Java (8): 11, x86_64: "Java SE 11" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home 10.0.2, x86_64: "Java SE 10.0.2" / Библиотека /Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home 9, x86_64: "Java SE 9" /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home 1.8.0_144, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
Вы также можете сообщить только местоположение конкретной версии Java, используя -v
/usr/libexec/java_home -v 11
/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
Знание расположения установленных JDK также полезно при использовании таких инструментов, как JEnv, или при добавлении локальной установки в SDKMAN, или при связывании системного JDK в Jabba - и вам нужно знать, где их найти.
Если вам нужно найти JDK с другими инструментами, проверьте эти места:
- SDKMAN устанавливается на
~/.sdkman/candidates/java/
- Джабба устанавливает в
~/.jabba/jdk
Переключение версий вручную
Исполняемый файл Java - это оболочка, которая будет использовать все, что настроено в JDK. JAVA_HOME
, так что вы можете изменить это, чтобы также изменить, какой JDK используется.
Например, если вы установили или не использовали JDK 11 для /Library/Java/JavaVirtualMachines/jdk-11.jdk
если это наибольший номер версии, он уже должен быть по умолчанию, если нет, вы можете просто установить:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
И теперь, где бы ни находился исполняемый файл Java, он увидит это и будет использовать правильный JDK.
С использованием /usr/libexec/java_home
Утилита, как описано выше, помогает вам создавать псевдонимы или запускать команды для изменения версий Java, определяя расположение различных установок JDK. Например, создание псевдонимов оболочки в вашем .profile
или же .bash_profile
изменить JAVA_HOME
для тебя:
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'
alias java10='export JAVA_HOME=$JAVA_10_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
# default to Java 11
java11
Затем, чтобы изменить версию, просто используйте псевдоним.
java8
java -version
Java-версия "1.8.0_144"
Конечно постановка JAVA_HOME
тоже работает вручную!
Переключение версий с JEnv
JEnv ожидает, что Java JDK уже существует на компьютере и может находиться в любом месте. Обычно вы найдете установленные Java JDK в /Library/Java/JavaVirtualMachines/
, JEnv позволяет установить глобальную версию Java, одну для текущей оболочки и локальную версию для каждого каталога, что удобно, когда некоторые проекты требуют версий, отличных от других.
Установите JEnv, если вы этого еще не сделали, инструкции на сайте http://www.jenv.be/ для ручной установки или использования Homebrew.
Добавьте любую версию Java в JEnv (настройте каталог, если вы разместили это в другом месте):
jenv add /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
Установите глобальную версию с помощью этой команды:
jenv global 11
Вы также можете добавить другие существующие версии, используя jenv add
аналогичным образом, и перечислите те, которые доступны. Например Java 8:
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
jenv versions
Посмотрите документы JEnv для большего количества команд. Теперь вы можете переключаться между любыми версиями Java (Oracle, OpenJDK и т. Д.) В любое время для всей системы, для оболочек или для локального каталога.
Чтобы помочь управлять JAVA_HOME
при использовании JEnv вы можете добавить плагин экспорта, чтобы сделать это для вас.
$ jenv enable-plugin export
You may restart your session to activate jenv export plugin echo export plugin activated
Плагин экспорта может не корректироваться JAVA_HOME
если она уже установлена, вам может потребоваться очистить эту переменную в своем профиле, чтобы ею можно было управлять с помощью JEnv.
Вы также можете использовать jenv exec <command> <parms...>
запускать отдельные команды с JAVA_HOME
а также PATH
правильно установить для этой команды, которая может включать в себя открытие другой оболочки.
Установка и переключение версий с помощью SDKMAN
SDKMAN немного отличается и обрабатывает как установку, так и переключение. SDKMAN также помещает установленные JDK в свое собственное дерево каталогов, которое обычно ~/.sdkman/candidates/java
, SDKMAN позволяет установить глобальную версию по умолчанию и версию, специфичную для текущей оболочки.
Установите SDKMAN по https://sdkman.io/install
Установите Java 11 с помощью SDKMAN:
sdk install java 11.0.0-open
Сделайте 11 версией по умолчанию:
sdk default java 11.0.0-open
Или переключитесь на 11 для сеанса:
sdk use java 11.0.0-open
Вы можете просмотреть список доступных версий для установки с помощью команды list:
sdk list java
И установите дополнительные версии, такие как JDK 8:
sdk install java 8.0.181-oracle
SDKMAN может работать с ранее установленными существующими версиями. Просто выполните локальную установку с указанием собственной метки версии и расположения JDK:
sdk install java my-local-11 /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
И используйте это свободно:
sdk use java my-local-11
Дополнительная информация доступна в Руководстве по использованию SDKMAN вместе с другими SDK, которые можно установить и управлять ими.
SDKMAN будет автоматически управлять вашим PATH
а также JAVA_HOME
для вас, как вы меняете версии.
Установка и переключение версий с Jabba
Jabba также выполняет как установку, так и переключение. Jabba также помещает установленные JDK в свое собственное дерево каталогов, которое обычно ~/.jabba/jdk
,
Установите Jabba, следуя инструкциям на домашней странице.
Список доступных JDK
jabba ls-remote
Установите Java JDK 11
jabba install openjdk@1.11.0
Используй это:
jabba use openjdk@1.11.0
Вы также можете использовать псевдонимы версий, связываться с уже установленными JDK и найти смесь интересных JDK, таких как GraalVM, Adopt JDK, IBM JDK и других. Полное руководство по использованию также доступно на домашней странице.
Jabba будет автоматически управлять вашим PATH
а также JAVA_HOME
для вас, как вы меняете версии.
Вот как я это сделал.
Шаг 1: Установите Java 11
Вы можете скачать Java 11 DMG для Mac здесь: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Шаг 2: После установки Java 11. Подтвердите установку всех версий. Введите следующую команду в своем терминале.
/usr/libexec/java_home -V
Шаг 3: Редактировать.bash_profile
sudo nano ~/.bash_profile
Шаг 4: Добавьте 11.0.1 по умолчанию. (Добавьте строку ниже в файл bash_profile).
export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)
переключиться на любую версию
export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)
Теперь нажмите CTRL+X, чтобы выйти из bash. Нажмите "Y", чтобы сохранить изменения.
Шаг 5: Перезагрузите bash_profile
source ~/.bash_profile
Шаг 6: Подтвердите текущую версию Java
java -version
С Homebrew и jenv:
Предположение: компьютер Mac, и вы уже установили homebrew.
Установить бочку:
$ brew tap caskroom/cask
$ brew tap caskroom/versions
Чтобы установить последнюю версию Java:
$ brew cask install java
Чтобы установить java 8:
$ brew cask install java8
Чтобы установить java 9:
$ brew cask install java9
Если вы хотите установить / управлять несколькими версиями, вы можете использовать jenv:
Установите и настройте jenv:
$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
Добавьте установленную java в jenv:
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/Contents/Home
Чтобы увидеть всю установленную java:
$ jenv versions
Команда выше предоставит список установленной Java:
* system (set by /Users/lyncean/.jenv/version)
1.8
1.8.0.202-ea
oracle64-1.8.0.202-ea
Настройте версию Java, которую вы хотите использовать:
$ jenv global oracle64-1.6.0.39
Ручное переключение версии системы по умолчанию без сторонних инструментов:
Как подробно описано в этом старом ответе, на macOS /usr/bin/java
это инструмент-обертка, который будет использовать версию Java, указанную JAVA_HOME
или, если эта переменная не установлена, будет искать установки Java под /Library/Java/JavaVirtualMachines/
и будет использовать тот с самой высокой версией. Он определяет версии, глядя на Contents/Info.plist
под каждую упаковку.
Вооружившись этими знаниями, вы можете:
- контролировать, какую версию система будет использовать, переименовывая
Info.plist
в версиях, которые вы не хотите использовать по умолчанию (этот файл не используется самой средой выполнения Java). - контролировать, какую версию использовать для конкретных задач, установив
$JAVA_HOME
Я только что подтвердил, что это все еще верно с OpenJDK & Mojave.
На новой системе не установлена версия Java:
$ java -version
No Java runtime present, requesting install.
Отмените это, загрузите OpenJDK 11 & 12ea на https://jdk.java.net/; установить OpenJDK11:
$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz
Система Java теперь 11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
Установите OpenJDK12 (ранний доступ в данный момент):
$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz
Система Java теперь 12:
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
Теперь давайте "спрячем" OpenJDK 12 от системной оболочки Java:
$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled
Система Java вернулась к 11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
И вы все еще можете использовать версию 12 пунктуально, вручную установив JAVA_HOME
:
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
Если на вашем компьютере установлено несколько версий, добавьте в профиль bash следующее:
экспорт JAVA_HOME_7=$(/usr/libexec/java_home -v1.7)
экспорт JAVA_HOME_8=$(/usr/libexec/java_home -v1.8)
экспорт JAVA_HOME_9=$(/usr/libexec/java_home -v9)
И добавьте следующие псевдонимы:
псевдоним java7='экспорт JAVA_HOME=$JAVA_HOME_7'
псевдоним java8='экспорт JAVA_HOME=$JAVA_HOME_8'
псевдоним java9='экспорт JAVA_HOME=$JAVA_HOME_9'
И можете переключиться на нужную версию, используя псевдоним:
В терминале:
~ >> java7
export JAVA_HOME=$JAVA_7_HOME
Другая альтернатива - использование SDKMAN! Смотрите https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/
Сначала установите SDKMAN: https://sdkman.io/install а затем...
- Установите Oracle JDK 8 с:
sdk install java 8.0.181-oracle
- Установите OpenJDK 11 с:
sdk install java 11.0.0-open
Переключать:
- Переключитесь на JDK 8 с
sdk use java 8.0.181-oracle
- Переключитесь на JDK 11 с
sdk use java 11.0.0-open
Чтобы установить значение по умолчанию:
- По умолчанию JDK 8 с
sdk default java 8.0.181-oracle
- По умолчанию JDK 11 с
sdk default java 11.0.0-open
Вы можете использовать asdf для установки и переключения между несколькими версиями java. Также есть плагины для других языков. Вы можете установить asdf с помощью Homebrew
brew install asdf
Когда asdf настроен, установите плагин java
asdf plugin-add java
Выберите версию для установки
asdf list-all java
Например, чтобы установить и настроить accepttopenjdk8
asdf install java adoptopenjdk-8.0.272+10
asdf global java adoptopenjdk-8.0.272+10
И, наконец, при необходимости настройте JAVA_HOME для своей оболочки. Просто добавьте в свою оболочку сценарий инициализации, например ~/.zshrc в случае zsh:
. ~/.asdf/plugins/java/set-java-home.zsh
Этот ответ расширяет отличный ответ Джейсона с более самоуверенным руководством по лучшему подходу для вашего варианта использования:
- SDKMAN - лучшее решение для большинства пользователей. Он прост в использовании, не имеет странной конфигурации и упрощает управление несколькими версиями для множества других проектов экосистемы Java.
- Загрузка версий Java через Homebrew и переключение версий через jenv - хороший вариант, но требует дополнительной работы. Например, команды Homebrew в этом ответе, получившем большое количество голосов, больше не работают. jenv немного сложнее настроить, плагины плохо документированы, а README говорит, что проект ищет нового сопровождающего. jenv по-прежнему отличный проект, он решает эту задачу, и сообщество должно быть благодарно за замечательный вклад. SDKMAN - лучший вариант, потому что он такой классный.
- Написано Jabba - это многоплатформенное решение, обеспечивающее одинаковый интерфейс на Mac, Windows и ПК (оно написано на Go, и это позволяет ему быть мультиплатформенным). Если вас волнует мультиплатформенное решение, это огромный аргумент. Если вас интересует только запуск нескольких версий на вашем Mac, вам не нужно многоплатформенное решение. Поддержка SDKMAN десятков популярных SDK - это то, чего вы упускаете, если используете Jabba.
Управление версиями вручную, наверное, худший вариант. Если вы решили переключить версии вручную, вы можете использовать этот код Bash вместо подробного кода Джейсона (фрагмент кода из README homebrew-openjdk:
jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}
Ответ Джейсона предоставляет основные команды для SDKMAN и jenv. Вот дополнительная информация о SDKMAN и дополнительная информация о jenv, если вы хотите получить больше информации об этих инструментах.
ИМХО, нет необходимости устанавливать все дополнительные приложения / пакеты.
Проверьте доступные версии с помощью команды:
> /usr/libexec/java_home -V
Matching Java Virtual Machines (8):
11, x86_64: "Java SE 11-ea" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
10.0.2, x86_64: "Java SE 10.0.2" /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_181-zulu-8.31.0.1, x86_64: "Zulu 8" /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
1.8.0_151, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
1.7.0_80, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Теперь, если вы хотите выбрать Azul JDK 8 в приведенном выше списке, а не Oracle Java SE 8, выполните команду, как показано ниже:
> /usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
Чтобы выбрать Oracle SE SE 8, вы должны вызвать команду:
> /usr/libexec/java_home -v 1.8.0_151
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
Как видите, номер версии должен быть уникальным набором строк: 1.8.0_181 против 1.8.0_151
Вы можете установить версию JDK любым способом.
- Домашнее пиво
- SDK человек
- Вручную
Затем я рекомендую использовать JENV для переключения между различными версиями и использования JDK, который вам нужен глобально или локально.
Вы можете найти более подробную информацию о том, как установить и использовать JENV здесь ->https://blog.adamgamboa.dev/2021/06/17/using-jenv-to-switch-jkd-versions/
Чтобы оставаться с конкретным основным выпуском, активируйте кран AdoptOpenJDK с краном для варки, а затем установите желаемую версию с помощью установки brew cask install:
$ brew tap AdoptOpenJDK/openjdk
$ brew cask install <version>
Чтобы установить AdoptOpenJDK 14 с HotSpot, запустите:
$ brew tap AdoptOpenJDK/openjdk
$ brew cask install adoptopenjdk14