Переключение между несколькими версиями 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 команда.