Перемикайтеся між декількома версіями Java


65

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

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

Відповіді:


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


1
Для мене це призвело до того, що java -версія стала java8, але JAVA_HOME все ще було встановлено на 7 :(
Ненотлеп

tq це також вирішити мою проблему. @Nenotlep то , що я зробив , це відредагувати змінні оточення вручну або в .bashrc або / і т.д. / навколишнього середовища
nuttynibbles

update-java-alternativesне була доступна для мене Я щойно замінив цю команду на update-alternatives java.
nofinator

@nofinator, який впливає лише на javaвиконуваний файл. Яку версію Ubuntu ви використовуєте?
денцель

1
@Nenotlep, щоб змінити JAVA_HOMEпотрібно виконати таку команду: source /etc/environment
1818

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з поточної активної версії


Як зазначає @danzel у прийнятій відповіді, це впливає лише на javaвиконуваний файл, а не на інші частини конфігурації. Використовуйте update-java-alternativesза наявності.
Премек Брада

4

Виходячи з відповіді @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


щоб псевдоніми стали постійними, можна помістити їх у ~ / .bashrc, більше інформації тут askubuntu.com/questions/17536/…
Костянтин Зюбін

E: Неможливо знайти пакет oracle-java7-set-default
Prakash Pandey

Однозначно найпростіший спосіб встановлення, використання та перемикання між різними версіями 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, таких як компілятор ( 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. Це поверне шлях, який ви тільки що встановили.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.