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

При установке 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? Я бы хотел установить оба и иметь возможность переключаться между ними вручную, в зависимости от того, какая версия мне нужна.

6 ответов

Решение

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...).

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

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 из текущей активной версии

Настройка 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, таких как компилятор (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, Это вернет путь, который вы только что установили.

Основываясь на ответе @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

Также рассмотрите возможность использования инструмента с графическим интерфейсом galternativesдоступен через менеджер пакетов ubuntu.

jrunscriptмогут быть недоступны в будущих выпусках, поэтому безопасный выбор - использовать export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))как было предложено @ThiamTeck. Также.bashrc должен выполняться каждый раз, когда вы меняете версию Java, используя update-alternative команда.

Другие вопросы по тегам