Як використовувати команду update-alternative --config java


80

Я встановлюю Apache Solr на Linux Debian (Squeeze). Мені доручили встановити sun-java jdk 1st. Тоді мені кажуть, що я повинен використовувати команду, sudo update-alternatives --config javaщоб переконатися, що певний java (sun-java) є робочим часом за замовчуванням. Але коли я запускаю цю команду, я отримую:

There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                      Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      auto mode
  1            /usr/bin/gij-4.4                           1044      manual mode
  2            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      manual mode
  3            /usr/lib/jvm/java-6-sun/jre/bin/java       63        manual mode

Press enter to keep the current choice[*], or type selection number:

Отже, який номер я повинен вибрати, щоб Sun-Java був типовим середовищем виконання? Крім того, що саме означають цей автоматичний та ручний режими? Якщо я вибрав 3 вище та запустив команду update-alternative, я отримаю той самий результат, що і вище, знову нічого, здається, не змінилося, крім того, що * зараз знаходиться перед 3, хоча він все ще читає ручний режим.

Чи є спосіб підтвердити правильність зробленого мною?

Відповіді:


49

Ви помітите великі зміни при виборі параметрів, якщо після цього введете "java -version". Так що, якщо ви біжите update-alternatives --config javaі вибрати варіант 3, ви будете використовувати Sun реалізації.
Крім того, що стосується autovs manual mode, при виборі потрібно вилучити його на auto modeкожній сторінці із зазначенням:

При використанні --configопції, альтернативи будуть перераховані всі варіанти для групи посилань, назва якої є головним посиланням. Потім вам буде запропоновано вибрати, який із варіантів використовувати для групи посилань. Після внесення змін група посилань більше не буде в ній auto mode. Вам потрібно буде скористатися цією --autoопцією, щоб повернутися до автоматичного стану.

І я вважаю, що auto modeце встановлено, коли ви встановлюєте перший / єдиний JRE / JDK.


31

update-alternatives в даному випадку проблематично, оскільки змушує оновити всі елементи залежно від JDK.

Для цієї конкретної мети пакет java-commonмістить інструмент, який називається update-java-alternatives.

Використовувати це просто. Спочатку перелічіть встановлення JDK, доступні на вашому комп'ютері:

root@mylaptop:~# update-java-alternatives -l
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1069 /usr/lib/jvm/java-1.8.0-openjdk-amd64

А потім підберіть один:

root@mylaptop:~# update-java-alternatives -s java-1.7.0-openjdk-amd64

27

Припускаючи, що один встановив JDK /opt/java/jdk1.8.0_144тоді:

  1. Встановіть альтернативу для javac

    $ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_144/bin/javac 1
    
  2. Перевірте / оновіть альтернативні налаштування:

    $ sudo update-alternatives --config javac
    

Якщо для вас є лише одна альтернатива, javacви отримаєте повідомлення про це, інакше виберіть опцію для нового JDK.

Тоді перевірте, чи все налаштовано правильно:

$ which javac
/usr/bin/javac

$ ls -l /usr/bin/javac
lrwxrwxrwx 1 root root 23 Sep  4 17:10 /usr/bin/javac -> /etc/alternatives/javac

$ ls -l /etc/alternatives/javac
lrwxrwxrwx 1 root root 32 Sep  4 17:10 /etc/alternatives/javac -> /opt/java/jdk1.8.0_144/bin/javac

І, нарешті

$ javac -version
javac 1.8.0_144

Повторіть для Java, keytool, jar тощо, якщо потрібно.


Як оновити це автоматично? Я просто втомився від необхідності налаштовувати його вручну кожного разу під час дзвінкаsudo update-alternatives --config javac
Рок

15

Ось як я встановлюю jdk

#!/bin/bash
cd /opt/
sudo mkdir java
sudo tar -zxvf ~/Downloads/jdk-8u192-linux-x64.tar.gz
sudo ln -s  jdk1.8.0_192 current
for file in /opt/java/current/bin/*
do
   if [ -x $file ]
   then
      filename=`basename $file`
      sudo update-alternatives --install /usr/bin/$filename $filename $file 20000
      sudo update-alternatives --set $filename $file
      #echo $file $filename
   fi
done

7

Є багато інших двійкових файлів, які потрібно пов’язати, тому я вважаю, що набагато краще спробувати щось на зразок sudo update-alternatives --allі вибрати правильні альтернативи для всього іншого, крімjava і javac.


6

Я використовую Ubuntu 18.04 LTS. Здебільшого, коли я зміню свою javaверсію, я також хочу використовувати ту саму javacверсію.
Я використовую update-alternativesцей спосіб, використовуючи ajava_home замість цього:

Встановлення

/opt/java/<version>Наприклад, встановіть кожну версію Java

~$ ll /opt/java/
total 24
drwxr-xr-x 6 root root 4096 jan. 22 21:14 ./
drwxr-xr-x 9 root root 4096 feb.  7 13:40 ../
drwxr-xr-x  8 stephanecodes stephanecodes 4096 jan.   8  2019 jdk-11.0.2/
drwxr-xr-x  7 stephanecodes stephanecodes 4096 dec.  15  2018 jdk1.8.0_201/

Налаштуйте альтернативи

~$ sudo update-alternatives --install /opt/java/current java_home /opt/java/jdk-11.0.2/ 100
~$ sudo update-alternatives --install /opt/java/current java_home /opt/java/jdk1.8.0_201 200

Заявити JAVA_HOME(у цьому випадку я використовую для цього сценарій глобальної ініціалізації)

~$ sudo sh -c 'echo export JAVA_HOME=\"/opt/java/current\" >> environment.sh'

Вийдіть або перезапустіть Ubuntu (це перезавантажить /etc/profile.d/environment.sh )

Використання

Змінити версію Java

Виберіть версію, яку ви хочете використовувати

~$ sudo update-alternatives --config java_home

There are 2 choices for the alternative java_home (providing /opt/java/current).

  Selection    Path                    Priority   Status
------------------------------------------------------------
  0            /opt/java/jdk-11.0.2     200       auto mode
  1            /opt/java/jdk-11.0.2     200       manual mode
* 2            /opt/java/jdk1.8.0_201   100       manual mode

Press <enter> to keep the current choice[*], or type selection number: 

Перевірте версію

~$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

~$ javac -version
javac 11.0.2

Порада

Додайте наступний рядок до ~/.bash_aliasesфайлу:

alias change-java-version="sudo update-alternatives --config java_home && java -version && javac -version"

Тепер використовуйте change-java-versionкоманду, щоб змінити версію Java



0

Якщо ви хочете регулярно перемикати jdk (або оновлювати його до нового після його випуску), дуже зручно використовувати sdkman .

Ви також можете додаткові інструменти, такі як maven з sdkman.

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