Переключення між Java 7 і 8 в OS X


25

Я встановив Java-8. Тепер я хотів повернутися до Java-7 за замовчуванням, тому я набрав ...

/usr/libexec/java_home -v 1.7.0_40 --exec java -version
/usr/libexec/java_home -v 1.7.0_40 --exec javac -version

Але я все одно бачу ...

java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)

Це справді працює ...

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home

Але я хотів би більш постійного рішення.

Хтось бачить, що я роблю неправильно?

Відповіді:


50

Легко перемикайте версії

  1. Встановіть версії 1.6, 1.7, 1.8 у будь-якому порядку. Примітка. Я вважаю, що останній встановлений визначає, який з них буде використовуватися для плагінів браузера, я не буду дбати про зміну наведених нижче.

  2. Потім додайте до свого ~/.bashrcабо ~/.bash_profile, або будь-коли:

    #!/bin/bash
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
    
    setjdk() {
       export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    }
    
  3. Підтвердьте зміну через java -version

    $ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
    
    $ setjdk 1.6
    $ java -version
    java version "1.6.0_65"
    Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
    Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
    
    $ setjdk 1.8
    $ java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build 1.8.0-b132)
    Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
    

Очевидно, що зміна стосується лише тривалості оболонки. Але ви можете бачити, де зараз це можна встановити глобально.


2
Одна проблема: JDK7 відмовляється встановлювати, якщо у вас вже є JDK8. Він вказує на URL-адресу на oracle.com для отримання додаткової інформації, яка дає вам 404. І, звичайно, інструкції щодо видалення JDK8 взагалі не працюють, тому зараз я в основному втрачений.
Eric W

1
просто використовуйте jenv jenv.be
madzohan

9

Ви можете використовувати jEnv ( http://www.jenv.be/ ), який є "інструментом командного рядка, який допоможе вам забути, як встановити змінну середовища JAVA_HOME для переключення між різними версіями JDK" (взято з домашньої сторінки проекту ).

Якщо ви знайомі з Ruby, JEnv подібний до використання RVM або rbenv. Це допомагає вам обробляти кілька різних JDK, встановлених на вашій машині, без необхідності писати власний сценарій для переходу з одного JDK на інший. Ви можете змінити поточну версію Java на основі, наприклад, у поточному каталозі або на основі файла конфігурації.


Чи можете ви розширити це? Це виглядає як коментар, а не відповідь.
Остін Т Французький

Якщо ви знайомі з Ruby, це як використовувати RVM або rbenv, щоб змінити поточну версію Java на основі, наприклад, у поточному каталозі або на основі файлу конфігурації. Якщо ви переходите на головну сторінку JENV, там є хороший підручник.
Pietro Di Bello

Ця публікація повинна бути для всіх, хто шукає відповіді, тому більш детальну інформацію в публікації очікується тут, щоб вважати повною і хорошою відповіддю.
Остін Т Французький

Я додав більше інформації і трохи розширив відповідь ... сподіваюся, це зараз виглядає краще. Дякуємо за відгук.
Pietro Di Bello

4

Ви не можете перемикатися між Java-версіями. У Документації ви бачите:

Одночасно може бути встановлений лише один JRE. Система не встановить JRE, який має нижчу версію, ніж поточна версія. Якщо ви хочете встановити нижчу версію JRE, спочатку видаліть поточну версію.

Якщо ви хочете повернутися до більш старої версії, вам доведеться видалити Java 8.


grrr спасибі, але це не допомагає моїй думці про OSX.
Джекі

4
@Jackie: Насправді це мало спільного з OS X, але більше з Oracle. Ще коли Apple підтримувала JDK для OS X, переходити між активними версіями Java було ідеально та легко. Будь ласка, звинувачуйте Oracle у їх шаленому інсталяторі, а не в OS X.
Алессандро Вермеулен

@AlessandroVermeulen з усією повагою, це не "інсталятор" чорт, я хотів би, щоб він не прийшов з попередньо встановленою версією, як мої linux коробки. Тоді я міг би «встановити» його в будь-якому випадку, що хотів, за допомогою бінарного файлу Unix. А потім були старіші версії OSX, де навіть потрібно було завантажуватися. IMHO - це абсолютно ті умови, які використовуються в OSX, і викликають проблему.
Джекі

4
На моїй машині встановлено кілька JDK, встановлених правильно, плагін Oracles не дозволяє перемикатися з 1,8 на 1,7 з командного рядка з повним контуром, і всі вони успішно працюють. / usr / libexec / java_home -V перераховує їх усіх - і панель налаштувань Java 7 дозволила
обрати

0

Я хочу доповнити відповідь @ nkadwa. Його пропозиція спрацювала, але лише після зміни симпосилання для CurrentSDK. Отож ось модифікований код:

setjdk() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    sudo ln -nsf ${JAVA_HOME%/*} /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
}
setjdk 1.8
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.