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 крім цього?

Спасибі
Дакі

Відповіді:


493

Найчистіший спосіб управління кількома версіями 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 (див. пункт "Домовірні версії-бочки" нижче)
  5. додайте цю версію для jenv, щоб керувати нею
  6. перевірте, чи правильно керує версія jenv
  7. повторіть кроки 4 - 6 для кожної потрібної версії Java

версії homebrew-cask

Додайте 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-Search
1616

10
Я б додав, що всі встановлення Java будуть входити, /Library/Java/JavaVirtualMachines/і коли ви додаєте їх до себе, jenv addви додасте такий вигляд /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. Ура!
Микола Ценков

14
Станом на 23 червня 2017 року, я бігаю, brew cask search java7але не знайдено Cask для "java7".
Mingliang Лю

4
@MingliangLIU Так, я теж ... це дійсно гарно. Я знайшов проблеми з цим на Github, коли вони згадували про деякі роботи, але я не міг змусити його працювати. Тож я змусив це зробити "вручну" через веб-сторінки Java та Oracle "Завантажити та встановити версії Java". Потім за допомогою /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)


18
Поки що це найкращий варіант для мене. легко може перейти на будь-яку версію за допомогою простої команди "java8" або "java7". Дякую за допомогу
MMHMasud

4
Чудово! :) А для таких, як я, ви можете використовувати: ls / Бібліотека / 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)
Ділан Нісслі

125

Для macOS Sierra 420

Цей довідник був спільно з різних джерел (відповіді вище, а також інші дописи), і працює ідеально.

0. Якщо ви ще цього не зробили, встановіть домашню мову.

Дивіться 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. Торкніться пункту "сходи / версії"

FYI: "Tap" розширює список доступних репостів для пивоваріння, який він може встановлювати, вище та за межі списку доступних репостів за замовчуванням.

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 один за одним.

Нам потрібно додати «/ Зміст / Головна» до папки версій. ПОПЕРЕДЖЕННЯ: Використовуйте реальні шляхи на вашій машині ... це просто приклад «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*
видавте

1
Чітке та чудове пояснення крок за кроком.
Ritesh Singh

1
Помилка: Cask 'java8' недоступний: Не існує жодної скриньки з цим ім'ям.
Олексій Ш.

6
java8 / 9/10 arent більше не доступний як бочки. Спробуйте це замість цього: "brew cask install accepttopenjdk / openjdk / Adotopenjdk8"
supi

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, це рішення може вам не підійти.
Айкут Акінчи

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. Додайте JDK до 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) тощо. Мак.

Після встановлення він створить dir в ~ / .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.


3

Jenv на Mac Sierra:

якщо після установки не працює, виконайте це виправлення помилок, щоб додати виконуваний файл Java до шляху

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

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

  • Переконайтесь, що ~ / .jenv є
  • which java може друкувати / Бібліотека / ...
  • jenv global 1.8
  • оболонка jenv 1.8

Врешті-решт, which javaдає вам:

/Users/xxxx/.jenv/shims/java


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 .


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.