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

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

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

brew cask info java

Показывает:

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

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

Ответ 1

примечание: Эти решения работают для различных версий Java, включая Java 8 и новую Java 13, и для любой другой предыдущей версии Java, включенной в список перечисленных менеджеров версий. Это включает в себя альтернативный JDK от OpenJDK, Oracle, IBM, Azul, Amazon Correto, Graal и других. Легко работайте с Java 7, Java 8, Java 9, Java 10, Java 11, Java 12 и Java 13!

У вас есть несколько вариантов, как выполнить установку, а также управлять переключением JDK. Установка может быть выполнена Homebrew, SDKMAN, Jabba или ручной установкой. Переключение может быть выполнено с помощью JEnv, SDKMAN, Jabba или вручную, установив JAVA_HOME. Все они описаны ниже.


Установка

Во-первых, установите Java, используя любой метод, который вы предпочитаете, включая Homebrew, SDKMAN или ручную установку файла tar.gz. Преимущества ручной установки заключаются в том, что расположение JDK можно разместить в стандартизированном месте для Mac OSX.

Установить с помощью SDKMAN

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

& lt; см. ниже "Установка и переключение версий с помощью SDKMAN">

Установить с помощью Jabba

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

& lt; см. ниже "Установка и переключение версий с помощью Jabba">

Установите вручную со страницы загрузки OpenJDK:

  1. Загрузите OpenJDK для Mac OSX из http://jdk.java.net/ (например, Java 13)

  2. Разархивируйте tar-архив OpenJDK и поместите полученную папку (например, jdk-13.jdk) в папку /Library/Java/JavaVirtualMachines/, поскольку это стандартное и ожидаемое место установки JDK. Вы также можете установить в любом месте в реальности.

Установить с помощью Homebrew

Версия Java, доступная в Homebrew Cask до 3 октября 2018 года, действительно была Oracle JVM. Однако теперь он был обновлен до OpenJDK. Обязательно обновите Homebrew, и тогда вы увидите последнюю версию, доступную для установки.

  1. установите Homebrew, если вы еще этого не сделали. Убедитесь, что оно обновлено:

    brew update
    
  2. Добавьте кассу бочек, если вы еще этого не сделали (или вы больше не видите старые версии Java на шаге № 3):

    brew tap homebrew/cask-versions
    

    и для версий AdoptOpenJDK добавьте этот кран:

    brew tap adoptopenjdk/openjdk
    

    Эти бочки часто меняют свои версии Java, и могут быть другие касания с дополнительными версиями Java.

  3. Ищите устанавливаемые версии:

    brew search java   
    

    или для версий AdoptOpenJDK:

    brew search jdk     
    
  4. Проверьте сведения о версии, которая будет установлена:

    brew cask info java
    

    или для версии AdoptOpenJDK:

    brew cask info adoptopenjdk
    
  5. Установите конкретную версию JDK, например java11, adoptopenjdk8, или просто java или adoptopenjdk для текущей. Например:

    brew cask install java
    

    Вы также можете использовать полный путь к более старым версиям:

    brew cask install homebrew/cask-versions/java11
    

И они будут установлены в /Library/Java/JavaVirtualMachines/, который является традиционным местом, ожидаемым в Mac OSX.

Другие варианты установки:

Некоторые другие разновидности openJDK:

Azul Systems Java Zulu сертифицированные сборки OpenJDK можно установить, следуя инструкциям на их сайте.

Zulu® - это сертифицированная сборка OpenJDK, полностью соответствующая стандарту Java SE. Zulu на 100% с открытым исходным кодом и свободно загружается. Теперь разработчики Java, системные администраторы и конечные пользователи могут пользоваться всеми преимуществами Java с открытым исходным кодом, гибкостью развертывания и контролем времени обновления.

Amazon Correto Сборки OpenJDK имеют простой в использовании установочный пакет для версии 8 или версии 11 (будут выпущены другие версии) и устанавливаются в стандартный каталог /Library/Java/JavaVirtualMachines/ на Mac OSX.

Amazon Corretto - это бесплатный, многоплатформенный, готовый к работе дистрибутив Open Java Development Kit (OpenJDK). Corretto поставляется с долгосрочной поддержкой, которая будет включать улучшения производительности и исправления безопасности. Amazon запускает Corretto на своих внутренних производственных площадках, и Corretto сертифицирована как совместимая со стандартом Java SE. С Corretto вы можете разрабатывать и запускать приложения Java на популярных операционных системах, включая Linux, Windows и macOS.


Где мой JDK?!?!

Чтобы найти местоположения ранее установленного Java JDK, установленного в расположениях системы по умолчанию, используйте:

/usr/libexec/java_home -V

Matching Java Virtual Machines (6):
13, x86_64: "OpenJDK 13" /Library/Java/JavaVirtualMachines/openjdk-13.jdk/Contents/Home 12, x86_64: "OpenJDK 12" /Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
11, x86_64: "Java SE 11" /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, 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. Например для Java 13:

/usr/libexec/java_home -v 13

/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

Знание местоположения установленного JDK также полезно при использовании таких инструментов, как JEnv, или при добавлении локальной установки в SDKMAN, или при связывании системного JDK в Jabba - и вам нужно знать, где их найти.

Если вам нужно найти JDK, установленный другими инструментами, проверьте эти места:

  • SDKMAN устанавливается на ~/.sdkman/candidates/java/
  • Jabba устанавливает на ~/.jabba/jdk

Переключение версий вручную

Исполняемый файл Java представляет собой оболочку, которая будет использовать любой JDK, настроенный в JAVA_HOME, так что вы можете изменить это, чтобы также изменить используемый JDK.

Например, если вы установили или удалили JDK 13 - /Library/Java/JavaVirtualMachines/jdk-13.jdk, если это самый большой номер версии, это уже должно быть значением по умолчанию, в противном случае вы можете просто установить:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-13.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)
export JAVA_12_HOME=$(/usr/libexec/java_home -v12)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)

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'
alias java12='export JAVA_HOME=$JAVA_12_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'

# default to Java 13
java13

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

java8
java -version

Java-версия "1.8.0_144"

Конечно, настройка JAVA_HOME тоже работает вручную!


Переключение версий с помощью JEnv

JEnv ожидает, что Java JDK уже существует на компьютере и может находиться в любом месте. Обычно вы найдете установленный Java JDK в /Library/Java/JavaVirtualMachines/. JEnv позволяет установить глобальную версию Java, одну для текущей оболочки и локальную версию для каждого каталога, что удобно, когда некоторые проекты требуют версий, отличных от других.

  1. Установите JEnv, если вы этого еще не сделали, инструкции на сайте http://www.jenv.be/ для ручной установки или использования Homebrew.

  2. Добавьте любую версию Java в JEnv (настройте каталог, если вы разместили его в другом месте):

    jenv add /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
    
  3. Установите глобальную версию с помощью этой команды:

    jenv global 13
    

Вы также можете добавить другие существующие версии, используя 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 позволяет установить глобальную версию по умолчанию и версию, специфичную для текущей оболочки.

  1. Установите SDKMAN из https://sdkman.io/install

  2. Перечислите доступные версии Java, чтобы убедиться, что вы знаете идентификатор версии

    sdk list java
    
  3. Установите одну из этих версий, например, Java 13:

    sdk install java 13.0.0-open 
    
  4. Сделайте 13 версией по умолчанию:

    sdk default java 13.0.0-open
    

    Или переключитесь на 13 для сеанса:

    sdk use java 13.0.0-open
    

Когда вы перечислите доступные версии для установки с помощью команды list, вы увидите большое разнообразие дистрибутивов Java:

sdk list java

И установите дополнительные версии, такие как JDK 8:

sdk install java 8.0.181-oracle

SDKMAN может работать с ранее установленными существующими версиями. Просто выполните локальную установку с указанием собственной метки версии и расположения JDK:

sdk install java my-local-13 /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

И свободно им пользоваться:

sdk use java my-local-13

Дополнительная информация доступна в Руководстве по использованию SDKMAN, а также в другом SDK, которым он может быть установлен и управлять.

SDKMAN будет автоматически управлять вашими PATH и JAVA_HOME за вас при смене версий.


Установка и переключение версий с помощью Jabba

Jabba также выполняет установку и переключение. Jabba также помещает установленный JDK в свое собственное дерево каталогов, которое обычно является ~/.jabba/jdk.

  1. Установите Jabba, следуя инструкциям на домашней странице.

  2. Список доступных JDK

    jabba ls-remote
    
  3. Установите Java JDK 12

    jabba install [email protected]
    
  4. Используйте это:

    jabba use [email protected]
    

Вы также можете использовать псевдонимы версий, ссылаться на уже установленный JDK и найти сочетание интересных JDK, таких как GraalVM, Adopt JDK, IBM JDK и других. Полное руководство по использованию также доступно на главной странице.

Jabba будет автоматически управлять вашими PATH и JAVA_HOME для вас при смене версий.

Ответ 2

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

Шаг 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

Ответ 3

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

Как указано в этом более старом ответе, в 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
[...]

Ответ 4

Другая альтернатива - использование 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

Ответ 5

Я пытаюсь установить программное обеспечение, которое требует установки устаревшей среды выполнения Java SE 6 на MacBook Pro. Но когда я пытаюсь установить Java старую версию, появляется это сообщение: "!" Новая версия этого пакета уже установлена. Любая помощь или предложить?

Ответ 6

С доморощенным и jenv:

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

Установить бочку:

$ 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

Ответ 7

Если на вашем компьютере установлено несколько версий, добавьте следующее в профиль 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

Ответ 8

IMHO, нет необходимости устанавливать все дополнительные приложения/пакеты.

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

> /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 против 1.8.0_151