Переключение между несколькими версиями Java

65

При установке Android Studio на Ubuntu 14.04 я получаю сообщение о том, что моя версия Java ( javac 1.7.0_79) вызывает проблемы. Я нашел решение, как установить более новую версию Oracle для Java:

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Однако я боюсь, что это может перезаписать мою существующую open-jdkверсию Java. Поскольку я не знаю, какая из моих программ зависит от Java, я боюсь, что это может привести к сбою этих других программ.

Есть ли способ убедиться, что apt-getне переписать мою предыдущую Java? Я бы хотел установить оба и иметь возможность переключаться между ними вручную, в зависимости от того, какая версия мне нужна.

mcExchange
источник

Ответы:

83

Apt-get не будет перезаписывать существующие версии Java.

Для переключения между установленными версиями Java используйте update-java-alternativesкоманду.

Список всех версий Java:

update-java-alternatives --list

Установить версию Java по умолчанию (требуются права суперпользователя):

sudo update-java-alternatives --set /path/to/java/version

... где /path/to/java/versionодин из перечисленных предыдущей командой (например /usr/lib/jvm/java-7-openjdk-amd64).


Дополнительная информация:

update-java-alternativesявляется инструментом , который использует удобство в Debian системы альтернатив ( update-alternatives) , чтобы установить кучу ссылок на указанную версию Java (например java, javac...).

Danzel
источник
1
Для меня это привело к тому, что java-версия была java8, но JAVA_HOME по-прежнему был установлен в 7 :(
Nenotlep
Это тоже решит мою проблему. @Nenotlep, что я сделал, это отредактировал переменную окружения вручную либо в .bashrc, либо в / etc / environment
nuttynibbles
update-java-alternativesне было доступно для меня. Я просто заменил эту команду на update-alternatives java.
нофинатор
@nofinator, который влияет только на javaисполняемый файл. Какую версию Ubuntu вы используете?
Данзел
1
@Nenotlep, чтобы измениться, JAVA_HOMEвы должны выполнить следующую команду: source /etc/environment
janb
48

использование

sudo update-alternatives --config java

который перечисляет все установленные версии с помеченной текущей активной и предоставляет диалог для переключения:

There are 3 choices for the alternative java (providing /usr/bin/java).

Selection    Path...
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-oracle/bin/java...
* 1            /usr/lib/jvm/java-7-oracle/jre/bin/java...
  2            /usr/lib/jvm/java-8-oracle/jre/bin/java...
  3            /usr/lib/jvm/java-9-oracle/bin/java...

Press <enter> to keep...[*], or type selection number: 

использование

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

установить $JAVA_HOMEиз текущей активной версии

muet
источник
Как отметил @danzel в принятом ответе, это влияет только на javaисполняемый файл, а не на другие части конфигурации. Используйте, update-java-alternativesесли доступно.
Премек Брада
5

Основываясь на ответе @muet, я обнаружил, что это работает без проблем:

Добавьте это к ~/.bashrc:

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

Добавить к псевдонимам:

alias useJava8='yes | sudo apt-get install oracle-java8-set-default && source ~/.bashrc'
alias useJava7='yes | sudo apt-get install oracle-java7-set-default && source ~/.bashrc'

Затем вы можете переключиться в той же оболочке, используя только: useJava7илиuseJava8

brianjohnsen
источник
чтобы сделать псевдонимы постоянными, их можно поместить в ~ / .bashrc, более подробная информация здесь: askubuntu.com/questions/17536/…
Константин Зюбин,
E: Невозможно найти пакет oracle-java7-set-default
Пракаш Пандей,
Самым простым способом установки, использования и переключения между различными версиями Java является использование SDKMAN! Смотрите здесь: sdkman.io/usage.html
brianjohnsen
недавно наткнулся на другую команду, чтобы установить JAVA_HOME, но еще не примерил .bashrc:export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
ThiamTeck
3

Настройка Java

Вы можете настроить, какая версия является значением по умолчанию для использования в командной строке, используя команду update-alternatives, которая определяет , какие символические ссылки используются для различных команд.

sudo update-alternatives --config java

Вывод будет выглядеть примерно так:

There are 5 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-6-oracle/jre/bin/java          1         manual mode
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          2         manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  4            /usr/lib/jvm/java-8-oracle/jre/bin/java          3         manual mode
  5            /usr/lib/jvm/java-9-oracle/bin/java              4         manual mode

Press <enter> to keep the current choice[*], or type selection number:

Теперь вы можете выбрать номер для использования по умолчанию. Это также можно сделать для других команд Java, таких как compiler ( javac), генератор документации ( javadoc), инструмент подписи JAR ( jarsigner) и другие. Вы можете использовать следующую команду, заполнив команду, которую хотите настроить.

sudo update-alternatives --config command

Установка JAVA_HOMEпеременной среды

Многие программы, такие как серверы Java, используют переменную среды JAVA_HOME для определения места установки Java.

Скопируйте путь из вашей предпочтительной установки и затем откройте / etc / environment, используя Sublime Text или ваш любимый текстовый редактор.

sudo subl /etc/environment

В конце этого файла добавьте следующую строку, заменив выделенный путь собственным скопированным путем.

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Сохраните и закройте файл, и перезагрузите его: source /etc/environment.
Теперь вы можете проверить , является ли переменная окружения установлена, выполнив следующую команду: echo $JAVA_HOME. Это вернет путь, который вы только что установили.

naXa
источник