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

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

единственные другие установки, которые я обнаружил, что делают больше вещей автоматически, - это установка Oracle через Homebrew cask, но это коммерческий 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 ответов


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

у вас есть несколько вариантов, как сделать установка, а также управлять переключением. Установка может быть сделана Homebew, SDKMAN, Джабба, или ручная установка. Переключение может быть сделано JEnv, SDKMAN или Джабба.


установка

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

установить с SDKMAN

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

см. ниже "установка и переключение версий с SDKMAN">

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

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

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

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

  1. скачать OpenJDK 11 для Mac OSX из http://jdk.java.net/11/

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

установить с Homebrew

пока недоступно для OpenJDK 11,в ближайшее время! С AdoptOpenJdk>

для других версий Java:

  1. установить Homebrew если вы еще этого не сделали.

  2. добавить бочках нажмите:

    brew tap homebrew/cask-versions
    
  3. ищите устанавливаемые версии:

    brew search java
    
  4. проверьте информацию о версии, которая будет установлена:

    brew cask info java
    

    обратите внимание, что текущая версия является коммерческой версией Java 11 Oracle, а не OpenJDK 11.

  5. установите определенную версию JDK, такую как java8, java10 или java для ток:

    brew cask install java
    

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

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

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

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


где мой JDK?!?!

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

/usr/libexec/java_home -V

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

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

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

переключение версий с 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-11.jdk/Contents/Home
    
  3. установите глобальную версию с помощью этой команды:

    jenv global 11
    

вы также можете добавить другие существующие версии, используя jenv add аналогичным образом и перечислите те, которые доступны. Например Java 8:

jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home 
jenv versions

посмотреть JEnv docs дополнительные команды. Теперь вы можете переключаться между любыми версиями 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 11 с помощью SDKMAN:

    sdk install java 11.0.0-open 
    
  3. сделать 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 также помещает установленные JDK в свое собственное дерево каталогов, которое обычно ~/.jabba/jdk.

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

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

    jabba ls-remote
    
  3. установить Java JDK 11

    jabba install openjdk@1.11.0
    
  4. использовать:

    jabba use openjdk@1.11.0
    

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

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


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

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 в приведенном выше списке, а не Java SE 8 Oracle, вызовите команду, как показано ниже:

> /usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

чтобы выбрать Java SE 8 Oracle, вы должны вызвать команду:

> /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