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

333

Как я могу установить дополнительную 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 в дополнение к этому?

Спасибо
Дакки

Dakkar
источник

Ответы:

493

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

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

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

Как видно на http://hanxue-it.blogspot.ch/2014/05/install-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


Ресурсы

Адриен Бе
источник
16
Было бы хорошо упомянуть, что homebrew-cask может быть установлен с командой, brew install caskroom/cask/brew-caskа brew install caskне с плагином Emacs.
Unnawut
7
Я столкнулся с несколькими проблемами при реализации этого решения, одна из которых была с jenvвозвратом No such file or directory.ошибки. Эта вики помогла мне решить это. github.com/gcuisinier/jenv/wiki/Trouble-Shooting
июль
10
Я хотел бы добавить, что все установки Java будут в /Library/Java/JavaVirtualMachines/и при добавлении их с jenv addвами добавить путь, похожий на этот /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. Ура!
Николай Ценков
14
По состоянию на 23 июня 2017 года я бежал, brew cask search java7но не нашел бочку для "java7".
Минлян Лю
4
@MingliangLIU да я тоже ... это действительно отстой. Я нашел проблемы об этом на Github, где они упомянули некоторые обходные пути, но я не мог заставить его работать. Поэтому мне пришлось делать это «вручную» с помощью веб-страниц «Загрузка и установка Java-версий» от Apple и Oracle. Затем с помощью /usr/libexec/java_home -Vдважды проверьте пути, где они были установлены.
Адриен Бе
304

Удалите 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)

Vegard
источник
18
Пока это лучший вариант для меня. легко можно переключиться на любую версию с помощью простой команды "java8" или "java7". Спасибо за помощь
MMHMasud
4
Большой ! :) А для других, как я, вы можете использовать: ls / Library / Java / JavaVirtualMachines, чтобы увидеть, какие версии доступны. Затем вы можете включить разные версии 1.8.x. А также вы должны добавить экспорт PATH = $ JAVA_HOME / bin: $ PATH
Nico
4
Спасибо за это. Я просто хотел упомянуть, что мне удалось сделать это, установив jdk7 после jdk8 (нет необходимости удалять jdk8).
Тит
6
Не знаю, почему я потратил время на jenv, так как это просто работает и не загромождает запуск вашей оболочки на 0,5 с с помощью jenv init.
cvakiitho
2
Если вы пытаетесь заставить java 9 работать таким образом, аргумент версии для java_home для java 9 должен быть просто, 9например,export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley
125

Для 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» в папку версии. ПРЕДУПРЕЖДЕНИЕ: Используйте реальные пути на вашей машине ... это просто пример «s

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
боб
источник
1
Кроме того, перезапустите свой терминал послеbrew cask install java*
squeeish
1
Четкое и отличное объяснение шаг за шагом.
Ритеш Сингх
1
Ошибка: Бочка 'java8' недоступна: Бочка с таким именем не существует.
Алексей Ш.
6
java8 / 9/10 больше не доступны в виде бочек. Попробуйте вместо этого: «brew cask install accepttopenjdk / openjdk / accepttopenjdk8»
19
1
brew tap caskroom/versionsдолжно бытьbrew tap homebrew/cask-versions
Вячеслав Котрута
42

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
Майкл Пасха
источник
SDKMAN поддерживает версии, начиная с Java 1.7. Если вы готовы использовать Java 1.6, это решение может не подойти вам.
Aykut Akıncı
sdkman великолепен, но они не поддерживают определенные версии в версии. Например, Datastax Dev Center работает только с 1.8.0_151, но я не могу указать это с sdkman. Надеюсь, они добавят больше версий.
Эдуардо Деннис
Если у вас есть локальная версия, я думаю, вы можете установить ее в SDKMan - sdkman.io/usage#localversion (но я не пробовал)
Michael Easter
6

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

Динеш Арора
источник
5
Не помещайте изображения ваших команд, это затрудняет их копирование / вставку. Чтобы выделить команды, используйте обратные пометки "` "для отдельного слова или короткой команды или сделайте отступ в своей команде с 4 пробелами в отдельной строке (или с кратными 4 в списках).
Секи
1
Спасибо Секи. Я изо всех сил пытался разместить изображения и потратил много времени, пытаясь отформатировать, но не смог сделать это правильно. Спасибо, что поделились информацией о бэктиках.
Динеш Арора
4
Я думаю, вы могли использовать одно и то же изображение четыре раза.
Эллен Спертус
5

Я недавно нашел этот менеджер версий 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
Йорк Ян
источник
4

Я использую 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.

ChaitanyaBhatt
источник
3

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

CodeFarmer
источник
3

В том же духе, что и @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 .

hulius
источник
0

Вот более сухая версия для 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
elad.chen
источник
0

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

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

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

Матиас Болен
источник