Переключение между 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)
    

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

nkadwa
источник
2
Одна проблема: JDK7 отказывается устанавливать, если у вас уже есть JDK8. Он указывает вам URL на oracle.com для получения дополнительной информации, которая дает вам 404. И, конечно, инструкции по удалению для JDK8 не работают вообще, так что теперь я в основном заблудился.
Эрик 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, есть хороший учебник.
Пьетро ди Белло
Этот пост должен быть предназначен для всех, кто ищет ответы, поэтому более подробная информация в посте будет считаться полным и хорошим ответом.
Остин Т Френч
Я добавил больше информации и немного расширил ответ ... надеюсь, теперь это выглядит лучше. Спасибо за ответ.
Пьетро ди Белло
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, где даже требовалось загрузиться. ИМХО, это абсолютные соглашения, используемые в OSX, которые вызывают проблему.
Джеки,
4
На моей машине правильно установлено несколько JDK, это плагин предпочтений Oracles, который не позволяет переключаться с 1.8 на 1.7, из командной строки с полным путем они все работают успешно. / usr / libexec / java_home -V перечисляет их все - и панель настроек Java 7 позволяет выбирать
JRE
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
imdahmd
источник