Как использовать команду update-alternatives --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-alternate, я получу тот же результат, что и выше, опять же, похоже, ничего не изменилось, за исключением того, что теперь перед 3 стоит *, хотя он все еще читает ручной режим.

Есть ли способ подтвердить, что я сделал правильно?

user1680916
источник

Ответы:

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
Jopasserat
источник
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
Rock
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
user2733648
источник
7

Есть много других двоичных файлов, которые необходимо связать, поэтому я думаю, что гораздо лучше попробовать что-то вроде sudo update-alternatives --allи выбрать правильные альтернативы для всего остального, кроме javaи javac.

Поль-Себастьян Маноле
источник
6

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

Установка

Установите каждую версию java /opt/java/<version>, например, в

~$ 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.

Armadill013
источник