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

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

sudo apt-add-repository ppa:webupd8team/javasudo apt-get updatesudo apt-get install oracle-java8-installer

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

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

Apt-get не перезапишет существующие версии java.

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

Перечислите все версии java:

update-java-alternatives --list

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

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 modePress <enter> to keep the current choice[*], or type selection number:

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

sudo update-alternatives --config команда

Установка 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

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

Рассмотрите также возможность использования инструмента GUI galternatives доступно через менеджер пакетов ubuntu.