Jak używać polecenia update-alternatives --config java

80

Instaluję Apache Solr na Linux Debian (Squeeze). Zostałem poinstruowany, aby zainstalować 1. Sun-java jdk. Następnie powiedziano mi, że powinienem użyć polecenia, sudo update-alternatives --config javaaby upewnić się, że określona java (sun-java) jest domyślnym środowiskiem wykonawczym. Jednak po uruchomieniu tego polecenia otrzymuję:

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:

Więc jaki numer powinienem wybrać, aby sun-java był domyślnym środowiskiem wykonawczym? Co dokładnie oznaczają tryby automatyczny i ręczny? Jeśli wybiorę 3 powyżej i uruchomię polecenie aktualizacji-alternatywy, otrzymam takie same dane wyjściowe jak powyżej, znowu wydaje się, że nic się nie zmieniło, z wyjątkiem tego, że * znajduje się teraz przed 3, chociaż nadal czyta tryb ręczny.

Czy istnieje sposób, aby potwierdzić, że to, co zrobiłem, jest prawidłowe?

user1680916
źródło

Odpowiedzi:

49

Zauważysz dużą zmianę po wybraniu opcji, jeśli po wykonaniu tej czynności wpiszesz „java -version”. Jeśli więc uruchomisz update-alternatives --config javai wybierzesz opcję 3, będziesz korzystać z implementacji Sun.
Ponadto, w odniesieniu do autovs manual mode, dokonując wyboru należy wyjąć ją auto modena tej stronie treści:

Podczas korzystania z tej --configopcji alternatywy będą zawierać listę wszystkich opcji dla grupy dowiązań, której dana nazwa jest łączem głównym. Zostaniesz poproszony o wybranie opcji do użycia dla grupy linków. Po wprowadzeniu zmiany grupa linków nie będzie już dostępna auto mode. Będziesz musiał użyć tej --autoopcji, aby powrócić do stanu automatycznego.

I wydaje mi się, że auto modejest to ustawione podczas instalowania pierwszego / jedynego środowiska JRE / JDK.

Jordan Denison
źródło
31

update-alternatives jest to problematyczne w tym przypadku, ponieważ wymusza aktualizację wszystkich elementów zależnych od JDK.

W tym celu pakiet java-commonzawiera narzędzie o nazwie update-java-alternatives.

Używanie go jest proste. Najpierw wymień instalacje JDK dostępne na twoim komputerze:

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

A potem podnieś jeden:

root@mylaptop:~# update-java-alternatives -s java-1.7.0-openjdk-amd64
jopasserat
źródło
27

Zakładając, że ktoś zainstalował JDK w /opt/java/jdk1.8.0_144:

  1. Zainstaluj alternatywę dla javac

    $ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_144/bin/javac 1
    
  2. Sprawdź / zaktualizuj konfigurację alternatyw:

    $ sudo update-alternatives --config javac
    

Jeśli istnieje tylko jedna alternatywa javac, pojawi się komunikat o tym, w przeciwnym razie wybierz opcję dla nowego JDK.

Aby sprawdzić, czy wszystko jest poprawnie skonfigurowane:

$ 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

I w końcu

$ javac -version
javac 1.8.0_144

W razie potrzeby powtórz te czynności dla Java, Keytool, Jar itp.

Richard Grimshaw
źródło
Jak zaktualizować to automatycznie? Po prostu mam dość konieczności ręcznej konfiguracji za każdym razem, gdy dzwonięsudo update-alternatives --config javac
Rock
15

W ten sposób instaluję 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
źródło
7

Istnieje wiele innych plików binarnych, które należy połączyć, więc myślę, że znacznie lepiej jest spróbować czegoś takiego sudo update-alternatives --alli wybrać odpowiednie alternatywy dla wszystkiego innego oprócz javai javac.

Paul-Sebastian Manole
źródło
6

Używam Ubuntu 18.04 LTS. W większości przypadków, gdy zmieniam javawersję, chcę również użyć tej samej javacwersji.
Używam w update-alternativesten sposób, używając plikujava_home alternatywy:

Instalacja

Zainstalować każdą wersję javy w /opt/java/<version>, na przykład

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

Skonfiguruj alternatywy

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

Zadeklaruj JAVA_HOME(w tym przypadku używam do tego globalnego skryptu inicjującego)

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

Wyloguj się lub uruchom ponownie Ubuntu (spowoduje to ponowne załadowanie /etc/profile.d/environment.sh )

Stosowanie

Zmień wersję java

Wybierz wersję, której chcesz użyć

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

Sprawdź wersję

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

Wskazówka

Dodaj następujący wiersz do ~/.bash_aliasespliku:

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

Teraz użyj change-java-versionpolecenia, aby zmienić wersję Java

Stephane Janicaud
źródło
0

Jeśli chcesz regularnie zmieniać jdk (lub aktualizować na nowy po jego wydaniu), bardzo wygodne jest użycie sdkman .

Możesz także korzystać z dodatkowych narzędzi, takich jak maven z sdkman.

armadill013
źródło