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