Как установить Java на Mac OSX, разрешив переключение версий?

Я хочу установить OpenJDK Java на Mac OSX и заставить его работать вместе с другими JDK, поскольку это более новая версия. В настоящее время я загрузил tar.gz и поместил его на свой путь, но это сложно поддерживать.

Единственная другая установка, которую я обнаружил, которая делает больше вещей автоматически, - это установка через Homebrew cask. Похоже, тоже только текущая версия:

brew cask info java

Показывает:

java: 13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/

Так что я могу установить его оттуда, но что дальше? Я застрял только на новой версии?

Просто спрашиваю, можем ли мы ограничить вопросительные теги одной версией? Поскольку в любом случае нет такого сценария / шагов установки для конкретной версии. Это общий (не связанный с версией) вопрос, и его может быть достаточно пометить только java-11, поскольку я предполагаю, что это то место, где люди начнут искать, что предлагают вопрос и ответ.

Naman 15.11.2018 16:20

Сценарии в ответах действительно включают определенные версии, хотя их легко интерпретировать для других версий. Но это также часть того, что ищут члены сообщества, поэтому полезно помочь им быстро найти правильные ответы, помогая привлечь внимание к обновленным и современным ответам и отличить от старых устаревших тем версии 6 и версии 8. Я думаю, что наличие последней стабильной версии и последней новой версии - разумные теги.

Jayson Minard 20.03.2019 14:11

Я бы, наверное, порекомендовал использовать Jenv для управления несколькими версиями Java.

paranza 26.04.2020 23:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
408
3
308 532
10

Ответы 10

Другой альтернативой является использование SDKMAN! См. https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/

Сначала установите SDKMAN: https://sdkman.io/install, а затем ...

  1. Установите Oracle JDK 8 с помощью: sdk install java 8.0.181-oracle
  2. Установите 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

ИМХО, все дополнительные приложения / пакеты устанавливать не нужно.

Проверьте доступные версии с помощью команды:

> /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 Java 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 vs 1.8.0_151

Разве в первом примере не должна быть строка версии 1.8.0_181-zulu-8.31.0.1? или это частичное совпадение?

Jayson Minard 07.10.2018 13:37

На самом деле это ничего не меняет для использования версии Java, а просто сообщает местонахождение JAVA_HOME. Ручное переключение с помощью этих команд описано в моем другом ответе.

Jayson Minard 07.10.2018 14:01

Ручное переключение системной версии по умолчанию без сторонних инструментов:

Как подробно описано в этот старый ответ, в 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
[...]

и теперь это должно быть верно с AdoptOpenJDK сборки

Hugues M. 30.10.2018 22:29

Вот как я это сделал.

Шаг 1: Установить Java 11

Вы можете скачать Java 11 dmg для Mac отсюда: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.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

Хорошее решение. Но что, если java -version все еще указывает на 8, пока я экспортировал JAVA_HOME 11?

AlexGera 20.02.2019 14:07

Вопрос касается Open JDK, но вместо этого вы связались с Oracle JDK. Open JDK, похоже, не имеет установщика или инструкций по установке.

Splaktar 28.02.2019 20:25

В ответ на @AlexGera - добавьте эту строку: export $ PATH = $ JAVA_HOME / bin: $ PATH

Fuad Efendi 05.02.2020 03:59

С Homebrew и jenv:

Предположение: компьютер Mac, и вы уже установили homebrew.

Установите Java с официального сайта Oracle. Вы можете установить несколько версий JDK. Он будет установлен по следующему пути:

 /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/
 /Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/
 /Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/

Без jenv система будет использовать последнюю установленную java.

Если вы хотите использовать / управлять несколькими версиями, вы можете использовать jenv:

Установите и настройте jenv:

$ brew install jenv
$ echo 'export PATH = "$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
$ source ~/.zshrc

Добавьте установленную java в jenv:

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/14.0.2.jdk/Contents/Home

Чтобы увидеть всю установленную java:

$ jenv versions

Вышеупомянутая команда предоставит список установленной java:

  system
  1.8
* 1.8.0.291 (set by /Users/lpatel/.jenv/version)
  14
  14.0
  14.0.2
  oracle64-1.8.0.291
  oracle64-14.0.2

Настройте версию Java, которую вы хотите использовать:

$ jenv global 1.8.0.291
Error: caskroom/cask was moved. Tap homebrew/cask-cask instead, затем fatal: repository 'https://github.com/Homebrew/homebrew-cask-cask/' not found
ChumiestBucket 25.10.2019 17:54

что сказал @ChumiestBucket - это решение имеет несколько проблем

WestCoastProjects 28.12.2019 03:00

@ChumiestBucket Я обновил решение, дайте мне знать, если у вас возникнут проблемы с этим. Спасибо !

Lyncean Patel 15.07.2021 14:55

@WestCostProjects К вашему сведению

Lyncean Patel 15.07.2021 14:55

Если на вашем компьютере установлено несколько версий, добавьте в профиль bash следующее:

export JAVA_HOME_7=$(/usr/libexec/java_home -v1.7)

export JAVA_HOME_8=$(/usr/libexec/java_home -v1.8)

export JAVA_HOME_9=$(/usr/libexec/java_home -v9)

И добавьте следующие псевдонимы:

alias java7='export JAVA_HOME=$JAVA_HOME_7'

alias java8='export JAVA_HOME=$JAVA_HOME_8'

alias java9='export JAVA_HOME=$JAVA_HOME_9'

И можете переключиться на нужную версию, используя псевдоним:

В терминале:

~ >> java7 export JAVA_HOME=$JAVA_7_HOME

да, это было рассмотрено в другом ответе здесь.

Jayson Minard 21.10.2019 17:58

Чтобы оставаться с конкретным основным выпуском, активируйте кран AdoptOpenJDK с краном для варки, а затем установите желаемую версию с помощью установки brew cask install:

$ brew tap AdoptOpenJDK/openjdk
$ brew cask install <version>

Чтобы установить AdoptOpenJDK 14 с HotSpot, запустите:

$ brew tap AdoptOpenJDK/openjdk
$ brew cask install adoptopenjdk14

Вы можете использовать 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, если вы хотите получить больше информации об этих инструментах.

Вы можете установить версию JDK любым способом.

  • Домашнее пиво
  • SDK человек
  • Вручную

Затем я рекомендую использовать JENV для переключения между различными версиями и использования JDK, который вам нужен глобально или локально.

Вы можете найти более подробную информацию о том, как установить и использовать JENV здесь -> https://blog.adamgamboa.dev/2021/06/17/using-jenv-to-switch-jkd-versions/

Другие вопросы по теме