Cómo usar el comando update-alternativas --config java

80

Estoy instalando Apache Solr en Linux Debian (Squeeze). Se me ha indicado que instale sun-java jdk 1st. Luego me dicen que debería usar el comando sudo update-alternatives --config javapara asegurarme de que un java en particular (sun-java) sea el tiempo de ejecución predeterminado. Sin embargo, cuando ejecuto este comando, obtengo:

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:

Entonces, ¿qué número debo seleccionar para tener sun-java como tiempo de ejecución predeterminado? Además, ¿qué significan exactamente los modos automático y manual? Si selecciono 3 arriba y ejecuto el comando de actualización alternativa, recibo el mismo resultado que el anterior, nuevamente nada parece haber cambiado excepto que el * está ahora frente al 3, aunque todavía se lee en modo manual.

¿Hay alguna forma de confirmar que lo que hice es correcto?

usuario1680916
fuente

Respuestas:

49

Notará un gran cambio al seleccionar opciones si escribe "java -version" después de hacerlo. Entonces, si ejecuta update-alternatives --config javay selecciona la opción 3, utilizará la implementación de Sun.
Además, con respecto a autovs manual mode, hacer una selección debería eliminarlo auto modesegún esta página indicando:

Al usar la --configopción, las alternativas enumerarán todas las opciones para el grupo de enlaces cuyo nombre de pila es el enlace maestro. A continuación, se le preguntará cuál de las opciones utilizar para el grupo de enlaces. Una vez que realice un cambio, el grupo de enlaces dejará de estar incluido auto mode. Deberá utilizar la --autoopción para volver al estado automático.

Y creo que auto modese establece cuando instala el primer / único JRE / JDK.

Jordan Denison
fuente
31

update-alternatives es problemático en este caso, ya que te obliga a actualizar todos los elementos dependiendo del JDK.

Para este propósito específico, el paquete java-commoncontiene una herramienta llamada update-java-alternatives.

Es muy sencillo de usar. Primero enumere las instalaciones de JDK disponibles en su máquina:

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

Y luego coge uno:

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

Suponiendo que uno haya instalado un JDK en /opt/java/jdk1.8.0_144ese entonces:

  1. Instale la alternativa para javac

    $ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_144/bin/javac 1
    
  2. Verifique / actualice la configuración de alternativas:

    $ sudo update-alternatives --config javac
    

Si solo hay una alternativa javac, aparecerá un mensaje que lo indica; de lo contrario, seleccione la opción para el nuevo JDK.

Para verificar que todo esté configurado correctamente, entonces:

$ 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

Y finalmente

$ javac -version
javac 1.8.0_144

Repita para java, keytool, jar, etc. según sea necesario.

Richard Grimshaw
fuente
¿Cómo actualizo esto automáticamente? Me canso de tener que configurarlo manualmente cada vez que llamosudo update-alternatives --config javac
Rock
15

Así es como instalo 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
usuario2733648
fuente
7

Hay muchos otros binarios que deben vincularse, así que creo que es mucho mejor probar algo como sudo update-alternatives --ally elegir las alternativas correctas para todo lo demás además de javay javac.

Paul-Sebastian Manole
fuente
6

Estoy usando Ubuntu 18.04 LTS. La mayoría de las veces, cuando cambio mi javaversión, también quiero usar la misma javacversión.
Yo uso de update-alternativesesta manera, usando una java_homealternativa en su lugar:

Instalación

Instale todas las versiones de Java en /opt/java/<version>, por ejemplo

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

Configurar alternativas

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

Declare JAVA_HOME(en este caso, uso un script de inicialización global para esto)

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

Cerrar sesión o reiniciar Ubuntu (esto volverá a cargar /etc/profile.d/environment.sh )

Uso

Cambiar la versión de java

Elija la versión que desea utilizar

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

Ver versión

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

Propina

Agregue la siguiente línea al ~/.bash_aliasesarchivo:

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

Ahora use el change-java-versioncomando para cambiar la versión de Java

Stephane Janicaud
fuente
0

Si desea cambiar el jdk de forma regular (o actualizar a uno nuevo una vez que se publique), es muy conveniente usar sdkman .

También puede utilizar herramientas adicionales como maven con sdkman.

armadill013
fuente