Mac OS X и несколько версий Java

Как я могу установить дополнительную Java на MacOS? Я установил JDK8, и это прекрасно работает. но теперь мне нужна установка jdk7 для целей разработки. При попытке установить старую версию через файл DMG, я получаю предупреждение, что уже установлена ​​более новая версия java и программа установки завершает работу.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

   /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

Как установить jdk7 в дополнение к этому?

Спасибо
Dakky

22 ответа

Решение

Самый простой способ управлять несколькими версиями Java на Mac - это использовать Homebrew,

А внутри Homebrew, используйте:

  • homebrew-cask установить версии java
  • jenv управлять установленными версиями Java

Как видно на http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html, это следующие шаги.

  1. установить доморощенный
  2. установить доморощенный jenv
  3. установить доморощенный бочонок
  4. установить конкретную версию Java с помощью cask (см. параграф "homebrew-cask version" ниже)
  5. добавить эту версию для jenv, чтобы управлять им
  6. проверьте правильность управления версией jenv
  7. повторите шаги с 4 по 6 для каждой версии Java, которая вам нужна

версии для домашних бочек

Добавить homebrew/cask-versions нажмите, чтобы доморощить, используя:

brew tap homebrew/cask-versions

Затем вы можете посмотреть все доступные версии:

brew search java

Затем вы можете установить понравившуюся вам версию (ы):

brew cask install java7
brew cask install java6

И добавьте их, чтобы Jenv управлял как обычно.

jenv add <javaVersionPathHere>

Я думаю, что это самый чистый и простой способ сделать это.


Еще одна важная вещь, которую стоит отметить, как уже упоминалось в Mac OS X 10.6.7 Java Path Current JDK сбивает с толку:

Для разных типов JDK или установок у вас будут разные пути

Вы можете проверить пути версий, установленных с помощью /usr/libexec/java_home -V См. Как проверить, установлен ли Java JDK на Mac?

На Mac OS X Mavericks я обнаружил следующее:

1) Встроенный JRE по умолчанию: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) JDK, загруженные с Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) JDK, загруженные из Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Ресурсы

Удалите jdk8, установите jdk7, затем переустановите jdk8.

Мой подход к переключению между ними (в.profile):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Тогда вы можете просто напечатать java7 или же java8 в терминале переключать версии.

(редактировать: обновлено, чтобы добавить улучшение Dylans для Java 9)

Для macOS Sierra 420

Это руководство было собрано из разных источников (ответы выше, а также из других постов), и работает отлично.

0. Если вы еще этого не сделали, установите homebrew.

Смотрите https://brew.sh/

1. Установите jenv

brew install jenv

2. Добавьте jenv в профиль bash.

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Добавьте jenv на свой путь

export PATH="$HOME/.jenv/shims:$PATH"

4. Нажмите "Caskroom/ версии"

К вашему сведению: "Tap" расширяет список доступных репозиториев brew, которые могут быть установлены за пределы списка доступных репозиториев brew по умолчанию.

brew tap caskroom/versions

5. Установите последнюю версию Java

brew cask install java

6. Установите Java 6 (или 7 или 8, что вам нужно)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Может быть, закройте и перезапустите Терминал, чтобы он увидел все новые установки ENV, которые были настроены.

7. Просмотр установок

Все версии Java устанавливаются здесь: /Library/Java/JavaVirtualMachines Давайте взглянем.

ls -la /Library/Java/JavaVirtualMachines

8. Добавьте каждый путь к jenv по одному.

Нам нужно добавить "/Contents/Home" в папку версии. ВНИМАНИЕ: Используйте фактические пути на вашем компьютере... это просто ПРИМЕРЫ

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Проверьте, зарегистрирован ли jenv в порядке

jenv versions

10. Установите версию Java для использования (глобально)

Где XX соответствует одному из пунктов в списке версий выше.

jenv global XX

Проверьте версию Java

java -version

Проверьте версии jenv

Следует также указать текущую версию, используемую со звездочкой.

jenv versions

СДЕЛАННЫЙ


Быстрая будущая ссылка

Чтобы изменить версии Java

... Смотрите список доступных версий Java

jenv versions

... тогда, где XX соответствует элемент в списке выше

jenv global XX

SDKMAN! это отличный инструмент для использования нескольких версий Java, Gradle, Groovy, Kotlin и других инструментов JVM в Mac OS. Документация по установке и использованию находится прямо на главном сайте.

(У меня нет принадлежности, просто счастливый пользователь).

В качестве примера использования, если я введу следующее в окне терминала, появится список доступных версий Java SDK (отредактировано для краткости):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

Вот + обозначает, что версия установлена. > обозначает, какая версия используется в данный момент. Чтобы установить версию:

$ sdk install java 7u141-zulu

Чтобы использовать версию в этом окне терминала:

$ sdk use java 9ea170

Во-первых, вам нужно убедиться, что у вас установлено несколько версий JAVA. Откройте новое окно терминала и введите:

      /usr/libexec/java_home -V

Ваш результат должен выглядеть так:

      Matching Java Virtual Machines (2):
11.0.1, x86_64: "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
1.8.0_201, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home

Обратите внимание, что доступно два JDK. Если вы не заметили версию Java, на которую нужно переключиться, загрузите и установите соответствующую версию отсюда (JDK 8 представлен как 1.8). После установки соответствующего JDK повторите этот шаг.

  1. Обратите внимание на версию JDK, на которую вы хотите переключиться. Например, «11.0» и «1.8» - это версии JDK, доступные в приведенном выше примере.

  2. Переключитесь на желаемую версию. Например, если вы хотите переключиться на JDK 8, введите следующую строку:

    экспорт JAVA_HOME= /usr/libexec/java_home -v 1.8

Для 11.0 переключите «1.8» на «11.0» 4. Проверьте версию JDK, введя в Терминал:

      java -version

Если вы выполнили все шаги правильно, версия JDK должна соответствовать той, которую вы указали на последнем шаге. 5. (Необязательно) Чтобы сделать это версией JDK по умолчанию, введите в Терминал следующее:

      open ~/.bash_profile

Затем добавьте в этот файл входные данные Терминала из шага 3:

ПЕРЕЙТИ НА ВЕРСИЮ JAVA 8

      export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

Сохраните и закройте файл.

В том же духе, что и @Vegard (легкий):

  • Установите желаемые JDK с помощью Homebrew
  • Положи это jdk bash и значение по умолчанию в вашем .profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
    
  • а затем, чтобы переключить свой jdk, вы можете сделать

     jdk 9
     jdk 11
     jdk 13
    

На основе https://github.com/AdoptOpenJDK/homebrew-openjdk.

Как найдено на этом сайте, так что давайте начнем с установки jEnv

  1. Запустите это в терминале

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
    
  2. Добавить jEnv в профиль bash

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
    
  3. При первой установке jEnv не будет иметь никаких JDK, связанных с ним.

    Например, я только что установил JDK 8, но jEnv не знает об этом. Чтобы проверить версии Java на jEnv

    На данный момент в системе обнаружена только версия Java (jre). * показывает версию, выбранную в данный момент. В отличие от rvm и rbenv, jEnv не может установить JDK для вас. Вам необходимо установить JDK вручную с веб-сайта Oracle.

  4. Установите JDK 6 с веб-сайта Apple. Это установит Java в /System/Library/Java/JavaVirtualMachines/, Причина, по которой мы устанавливаем Java 6 с веб-сайта Apple, заключается в том, что SUN не придумала JDK 6 для MAC, поэтому Apple создала / изменила собственную версию развертывания.

  5. Аналогичным образом установите JDK7 и JDK8.

  6. Добавить JDKs в jEnv.

    JDK 6:

    JDK 7: Http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: Http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Проверьте версии Java, установленные с помощью jenv

    Http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. Так что теперь у нас есть 3 версии Java в нашей системе. Чтобы установить версию по умолчанию, используйте команду

    jenv local <jenv version>
    

    Я хотел, чтобы JDK 1.6 запустил IntelliJ

    jenv local oracle64-1.6.0.65
    
  9. проверьте версию Java

    Java-версия Http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

Вот и все. Теперь у нас есть несколько версий Java, и мы можем легко переключаться между ними. jEnv также имеет некоторые другие функции, такие как оболочки для Gradle, Ant, Maven и т. д., а также возможность устанавливать параметры JVM глобально или локально. Проверьте документацию для получения дополнительной информации.

Управление несколькими версиями Java в MAC с помощью jenv

  1. Установите homebrew, используя следующую команду

/ bin / bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

  1. установить jenv и активировать jenv

варить установить Jenv

echo 'eval "$(jenv init -)"' >> ~ / .bash_profile

  1. кран-бочонки

пивоваренный кран для домашнего пивоварения / бочонка

  1. поиск доступной версии java, которую можно установить

варить поиск java

  1. Например, для установки java6 используйте следующую команду

варить установить cask java6

  1. Добавить несколько версий java в jenv

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

jenv add /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Примечание. - если вы получите ошибку типа «» ln: /Users//.jenv/versions/oracle64-1.8.0.231: нет такого файла или каталога, выполните следующее:-

mkdir -p / Пользователи//.jenv/versions/oracle64-1.8.0.231

  1. Перефразируйте jenv после добавления jdk

Jenv Rehash

  1. Список известных версий java для jenv

версии jenv

  1. Установить версию по умолчанию

jenv global oracle64-1.8.0.231

  1. Изменить версию java для проекта

локальный оракул jenv64-1.6.0.65

  1. установите JAVA_HOME с той же версией, что и jenv

jenv exec bash

эхо $JAVA_HOME

Я недавно нашел этот менеджер версий Java под названием Jabba, и его использование очень похоже на менеджеры версий других языков, таких как rvm (ruby), nvm (node), pyenv (python) и т. Д. Кроме того, он кроссплатформенный, поэтому его можно использовать на макинтош

После установки он создаст каталог в ~/.jabba для размещения всех версий Java, которые вы устанавливаете. Он "поддерживает установку Oracle JDK (по умолчанию) / Server JRE, Zulu OpenJDK (начиная с 0.3.0), IBM SDK, Java Technology Edition (начиная с 0.6.0) и с пользовательских URL-адресов".

Основное использование указано на их Github. Краткое резюме для начала:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8

Я знаю, что на этот вопрос уже есть много ответов, но я хочу поделиться своим решением только с использованием Темурина и Баша.

AdoptOpenJdk устарел, поэтому я использую Temurin.


1. Загрузите Temurin с помощью зеркал или менеджера пакетов.

$ brew install --cask temurin

И для других версий (например, Java 8):

$ brew tap homebrew/cask-versions

$ brew install --cask temurin8


2. Добавьте скрипт bash в свой профиль bash

Откройте свой ~/.zshrcили же ~/.bash_profile(в зависимости от того, что вы используете)

И добавьте этот код:

      set-jdk() {
    jdkversion=$1
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-"$jdkversion".jdk/Contents/Home;
    export PATH=$PATH:$JAVA_HOME/bin;
    java -version
}

3. Перезапустите терминал и измените версию Java.

$ set-jdk NN — это версия Java, которую вы хотите, и она уже установлена

например $ set-jdk 8Чтобы перейти на Java 8 / 1.8


Несколько соображений:

  • Он сохранит только версию Java в сеансе терминала, который вы использовали. set-jdkкоманда
  • Он не будет устанавливать версию Java как глобальную
  • Если вы хотите добавить JAVA_HOME в другой скрипт/приложение, вы можете установить /Library/Java/JavaVirtualMachines/temurin-<version>.jdk/Contents/Home(измените на желаемую версию Java. Как этот пример JD-GUI )

Наслаждаться

По состоянию на2023,brew install --cask zulu8не работал у меня наAppleчип.brew install openjdk@8тоже не стал. Единственное решение, которое сработало для меня, былоbrew install --cask adoptopenjdk8а потом конечноvim ~/.zshrcи внутри:

      export JAVAC_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
alias javac8='export JAVA_HOME=$JAVAC_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'

переключиться с терминала с помощьюjavac8на свежеустановленную (другую) версию. Примечание: у вас могут быть разныеJavaверсий, чем у меня, так что это просто пример.

Редактировать: по какой-то причине после активации требуется некоторое время. Мне кажется нужна перезагрузка ноутбука.

Я отвечаю в последнее время и настоятельно рекомендую вам использовать SDKMAN вместо Homebrew.

С помощью SDKMAN вы можете легко установить другую версию JAVA на свой Mac и переключаться с одной версии на другую.

Вы также можете использовать SDKMAN для ANT, GRADLE, KOTLIN, MAVEN, SCALA и т. Д.

Чтобы установить версию на свой Mac, вы можете запустить команду sdk install java 15.0.0.j9-adpt

Jenv на Mac Сьерра:

если после установки не работает, исправьте эту ошибку, чтобы добавить исполняемый файл Java в путь

export PATH="$HOME/.jenv/shims:$PATH"

даже если eval "$(jenv init -)" мог бы сделать эту работу. Причина в том, что папка / bin больше не существует, как описано на домашней странице, но вместо этого папка shim используется как / bin.

  • Убедитесь, что ~ /.jenv есть
  • which java может распечатать / Библиотека /...
  • jenv global 1.8
  • jenv shell 1.8

В конце концов, which java дает тебе:

/Users/xxxx/.jenv/shims/java

Я использую Mac OS X 10.9.5. Вот как я управляю несколькими JDK/JRE на своем компьютере, когда мне нужна одна версия для запуска приложения A и использование другой версии для приложения B.

Я создал следующий скрипт после получения помощи онлайн.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

Я положил вышеупомянутый скрипт в файл.profile. Просто откройте терминал, введите vi.profile, добавьте скрипт с приведенным выше фрагментом и сохраните его. После того, как ваш тип source .profile, это запустит скрипт вашего профиля без перезагрузки терминала. Сейчас типа java -version он должен показывать 1.7 в качестве текущей версии. Если вы намереваетесь изменить его на 1.8, тогда прокомментируйте строку setjdk jdk1.7.0_15.jdk и раскомментируйте строку setjdk jdk1.8.0_60.jdk, Сохраните скрипт и запустите его снова с помощью команды source. Я использую этот механизм для управления несколькими версиями JDK/JRE, когда мне нужно скомпилировать 2 разных проекта Maven, для которых нужны разные версии Java.

Новые команды для установки Java через Homebrew:

  • brew cask install adoptopenjdk/openjdk/adoptopenjdk8
  • brew cask install adoptopenjdk/openjdk/adoptopenjdk11

См доморощенного-OpenJDK репо для последних команд.

Установка Java

Вы можете установить Java через Homebrew, Jabba, SDKMAN или вручную. См. Этот ответ для получения подробной информации обо всех командах.

Смена версии Java *

Вы можете переключать версии Java с помощью jenv Jabba, SDKMAN или вручную. Подробную информацию обо всех командах переключения см. Здесь.

Лучшие решения

  • Jabba разработан для работы на нескольких платформах, поэтому это хороший вариант, если вам нужно решение, которое также будет работать на Windows.
  • Использование Homebrew для загрузки версий Java и jenv для переключения версий обеспечивает удобный рабочий процесс. jenv упрощает работу с версиями Java, хранящимися в любом каталоге на вашем компьютере, поэтому это хорошая альтернатива, если вы заинтересованы в хранении Java в каталогах, отличных от стандартных.
  • Использование SDKMAN для загрузки Javas и переключения версий - еще одна отличная альтернатива
  • Следует избегать переключения вручную, потому что это лишняя головная боль.

Функция ручного переключения версий Java

Вот функция Bash / ZSH для ручного переключения версий Java (с помощью OpenJDK):

       jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
 }

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

Я решил эту ошибку на своем mac m1 air, просто добавив путь к новой версии jdk в файл ~/.zshrc.

У меня есть несколько jdks в моем/Library/Java/JavaVirtualMachinesпуть. Таким образом, я могу выбрать любую версию, которую хочу установить в качестве пути Java по умолчанию.

Чтобы найти доступные версии Java:

      brew search java

Чтобы установить последнюю стабильную версию (19 на сегодняшний день):

      brew info java
brew install java

Чтобы системные оболочки Java (например, IDE) могли найти последнюю версию JDK, создайте символическую ссылку на нее с помощью:

      sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

Чтобы установить конкретную версию (11):

      brew install java11

Для системы обертки Java, чтобы найти JDK 11:

      sudo ln -sfn /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk

У вас может быть одна из версий OpenJDK в вашем PATH. Добавьте одну из следующих строк в ваш ~/.bash_profile

      export PATH="/opt/homebrew/opt/openjdk/bin:$PATH
export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH

Затем,

      source ~/.bash_profile

Если вы хотите сохранить несколько версий JDK (уже установленных) в Mac M1, чтобы легко переключаться между ними, добавьте следующие строки в файл ~/.zshrc.

      alias jdk11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
alias jdk8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"

Теперь их можно легко переключать, как показано ниже.

      % ~
: jdk8
openjdk version "1.8.0_382"
OpenJDK Runtime Environment (Zulu 8.72.0.17-CA-macos-aarch64) (build 1.8.0_382-b05)
OpenJDK 64-Bit Server VM (Zulu 8.72.0.17-CA-macos-aarch64) (build 25.382-b05, mixed mode)
% ~
: java -version
openjdk version "1.8.0_382"
OpenJDK Runtime Environment (Zulu 8.72.0.17-CA-macos-aarch64) (build 1.8.0_382-b05)
OpenJDK 64-Bit Server VM (Zulu 8.72.0.17-CA-macos-aarch64) (build 25.382-b05, mixed mode)
% ~
:
% ~
: jdk11
openjdk version "11.0.15" 2022-04-19 LTS
OpenJDK Runtime Environment Corretto-11.0.15.9.1 (build 11.0.15+9-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.15.9.1 (build 11.0.15+9-LTS, mixed mode)
% ~
: java -version
openjdk version "11.0.15" 2022-04-19 LTS

Вот отличный учебник https://medium.com/@chamikakasun/how-to-manage-multiple-java-version-in-macos-e5421345f6d0 с использованием jEnv, установленного brew

или вы можете проверить управляющую версию homebrew-openjdkhttps://github.com/AdoptOpenJDK/homebrew-openjdk, используя brew Tap

Вот более сухая версия для bash (на основании ответа Вегарда)

Замените 1.7 и 1.8 на те версии, которые вас интересуют, и вы получите псевдоним javaX; где "X" - это Java-версия (7 / 8 в фрагменте ниже), которая позволит вам легко переключать версии

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done

Я выполнил шаги по ссылке ниже - https://medium.com/@euedofia/fix-default-java-version-on-maven-on-mac-os-x-156cf5930078, и это сработало для меня.

cd /usr/local/Cellar/maven/3.5.4/bin/
nano mvn
--Update JAVA_HOME -> "${JAVA_HOME:-$(/usr/libexec/java_home)}"
mvn -version

Я использую это, чтобы установить более свежие версии OpenJDK. Пример для OpenJDK 14:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

См. https://github.com/AdoptOpenJDK/homebrew-openjdk для получения актуальной информации.

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