Verwendung des Befehls update-alternatives --config java

80

Ich installiere Apache Solr unter Linux Debian (Squeeze). Ich wurde angewiesen, sun-java jdk 1st zu installieren. Dann wird mir gesagt, dass ich den Befehl verwenden soll sudo update-alternatives --config java, um sicherzustellen, dass ein bestimmtes Java (Sun-Java) die Standardlaufzeit ist. Wenn ich diesen Befehl ausführe, erhalte ich jedoch:

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:

Also, welche Nummer sollte ich auswählen, um Sun-Java als Standardlaufzeit zu haben? Was genau bedeuten die automatischen und manuellen Modi? Wenn ich oben 3 auswähle und den Befehl update-alternative ausführe, erhalte ich dieselbe Ausgabe wie oben, scheint sich wieder nichts geändert zu haben, außer dass das * jetzt vor der 3 steht, obwohl es immer noch den manuellen Modus liest.

Gibt es eine Möglichkeit zu bestätigen, dass das, was ich getan habe, korrekt ist?

user1680916
quelle

Antworten:

49

Sie werden eine große Änderung bei der Auswahl von Optionen bemerken, wenn Sie danach "java -version" eingeben. Wenn Sie also die update-alternatives --config javaOption ausführen und auswählen 3, verwenden Sie die Sun- Implementierung.
In Bezug auf autovs manual modesollte das Treffen einer Auswahl auto modeauf dieser Seite erfolgen und Folgendes angeben:

Wenn Sie die --configOption verwenden, listen Alternativen alle Auswahlmöglichkeiten für die Linkgruppe auf, deren Vorname der Hauptlink ist. Sie werden dann gefragt, welche der Optionen für die Linkgruppe verwendet werden soll. Sobald Sie eine Änderung vorgenommen haben, befindet sich die Linkgruppe nicht mehr in auto mode. Sie müssen die --autoOption verwenden, um zum automatischen Status zurückzukehren.

Und ich glaube, es auto modewird festgelegt, wenn Sie das erste / einzige JRE / JDK installieren.

Jordan Denison
quelle
30

update-alternatives Dies ist in diesem Fall problematisch, da Sie gezwungen sind, alle Elemente abhängig vom JDK zu aktualisieren.

Zu diesem Zweck java-commonenthält das Paket ein Tool namens update-java-alternatives.

Es ist einfach zu bedienen. Listen Sie zunächst die auf Ihrem Computer verfügbaren JDK-Installationen auf:

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

Und dann eins abholen:

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

Angenommen, man hat ein JDK installiert in /opt/java/jdk1.8.0_144:

  1. Installieren Sie die Alternative für Javac

    $ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_144/bin/javac 1
    
  2. Überprüfen / aktualisieren Sie die alternative Konfiguration:

    $ sudo update-alternatives --config javac
    

Wenn es nur eine einzige Alternative für javacSie gibt, wird eine Meldung angezeigt, andernfalls wählen Sie die Option für das neue JDK.

Um zu überprüfen, ob alles korrekt eingerichtet ist, gehen Sie wie folgt vor:

$ 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

Und schlussendlich

$ javac -version
javac 1.8.0_144

Wiederholen Sie diesen Vorgang nach Bedarf für Java, Keytool, JAR usw.

Richard Grimshaw
quelle
Wie aktualisiere ich das automatisch? Ich habe es einfach satt, es jedes Mal manuell konfigurieren zu müssen, wenn sudo update-alternatives --config javac
Rock
15

So installiere ich 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
quelle
7

Es gibt viele andere Binärdateien, die verknüpft werden müssen. Ich denke, es ist viel besser, so etwas auszuprobieren sudo update-alternatives --allund die richtigen Alternativen für alles andere außer javaund auszuwählen javac.

Paul-Sebastian Manole
quelle
5

Ich benutze Ubuntu 18.04 LTS. Wenn ich meine javaVersion ändere , möchte ich meistens auch dieselbe javacVersion verwenden.
Ich benutze update-alternativesdiesen Weg und benutze java_homestattdessen eine Alternative:

Installation

Installieren Sie alle Java - Version in /opt/java/<version>, zum Beispiel

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

Alternativen konfigurieren

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

Deklarieren JAVA_HOME(In diesem Fall verwende ich dafür ein globales Initialisierungsskript)

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

Melden Sie sich ab oder starten Sie Ubuntu neu (dies wird neu geladen /etc/profile.d/environment.sh)

Verwendung

Java-Version ändern

Wählen Sie die Version, die Sie verwenden möchten

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

Version prüfen

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

Trinkgeld

Fügen Sie der ~/.bash_aliasesDatei die folgende Zeile hinzu :

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

Verwenden Sie nun den change-java-versionBefehl, um die Java-Version zu ändern

Stephane Janicaud
quelle
0

Wenn Sie das jdk regelmäßig wechseln möchten (oder nach seiner Veröffentlichung auf ein neues aktualisieren möchten), ist es sehr praktisch, sdkman zu verwenden .

Sie können auch zusätzliche Tools wie maven mit sdkman verwenden.

Gürteltier013
quelle