Cambiar entre múltiples versiones de Java

65

Al instalar Android Studio en Ubuntu 14.04 recibo el mensaje de que mi versión de Java ( javac 1.7.0_79) está causando problemas. Encontré una solución de cómo instalar una nueva versión de Oracle de Java:

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Sin embargo, me temo que esto podría sobrescribir mi open-jdkversión existente de Java. Como no sé cuáles de mis programas dependen de Java, me temo que esto podría bloquear estos otros programas.

¿Hay alguna manera de asegurarme de apt-getque no sobrescriba mi Java anterior? Básicamente, me gustaría tener ambos instalados y poder cambiar entre ellos manualmente, dependiendo de la versión que necesite.

mcExchange
fuente

Respuestas:

83

Apt-get no sobrescribirá las versiones java existentes.

Para cambiar entre las versiones instaladas de Java, use el update-java-alternativescomando.

Lista todas las versiones de Java:

update-java-alternatives --list

Establezca la versión de Java como predeterminada (necesita permisos de root):

sudo update-java-alternatives --set /path/to/java/version

... donde /path/to/java/versiones uno de los enumerados por el comando anterior (por ejemplo /usr/lib/jvm/java-7-openjdk-amd64).


Información Adicional:

update-java-alternativeses una herramienta que utiliza la conveniencia de Debian sistema de alternativas ( update-alternatives) para establecer un montón de enlaces a la versión de Java especificada (por ejemplo java, javac, ...).

danzel
fuente
1
Para mí, esto provocó que java -version fuera java8, pero JAVA_HOME todavía estaba configurado en 7 :(
Nenotlep
Esto también soluciona mi problema. @Nenotlep lo que hice fue editar la variable de entorno manualmente en .bashrc o / etc / environment
nuttynibbles
update-java-alternativesNo estaba disponible para mí. Acabo de reemplazar ese comando con update-alternatives java.
nofinator
@nofinator que solo afecta al javaejecutable. ¿Qué versión de Ubuntu usas?
danzel
1
@Nenotlep para cambiar JAVA_HOMEdebes ejecutar el siguiente comando: source /etc/environment
enero
48

Utilizar

sudo update-alternatives --config java

que enumera todas las versiones instaladas con la actual activa marcada y proporciona un diálogo para cambiar:

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

Selection    Path...
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-oracle/bin/java...
* 1            /usr/lib/jvm/java-7-oracle/jre/bin/java...
  2            /usr/lib/jvm/java-8-oracle/jre/bin/java...
  3            /usr/lib/jvm/java-9-oracle/bin/java...

Press <enter> to keep...[*], or type selection number: 

Utilizar

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

configurar $JAVA_HOMEdesde la versión activa actual

muet
fuente
Como señaló @danzel en la respuesta aceptada, esto afecta solo al javaejecutable, no a las otras partes de la configuración. Usar update-java-alternativessi está disponible.
Premek Brada
5

Según la respuesta de @muet, descubrí que esto funciona a la perfección:

Agregue esto a ~/.bashrc:

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

Agregar a los alias:

alias useJava8='yes | sudo apt-get install oracle-java8-set-default && source ~/.bashrc'
alias useJava7='yes | sudo apt-get install oracle-java7-set-default && source ~/.bashrc'

Luego puede cambiar dentro del mismo shell utilizando solo: useJava7ouseJava8

brianjohnsen
fuente
para hacer que los alias sean permanentes, uno puede ponerlos en ~ / .bashrc, más información aquí askubuntu.com/questions/17536/…
Konstantin Zyubin
E: No se puede encontrar el paquete oracle-java7-set-default
Prakash Pandey
¡La forma más fácil e inequívoca de instalar, usar y cambiar entre diferentes versiones de Java es usar SDKMAN! Ver aquí: sdkman.io/usage.html
brianjohnsen
recientemente .bashrcexport JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
encontré
3

Configurando Java

Puede configurar qué versión es la predeterminada para usar en la línea de comandos utilizando update-alternatives, que administra qué enlaces simbólicos se utilizan para diferentes comandos.

sudo update-alternatives --config java

La salida tendrá un aspecto similar al siguiente.

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

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-6-oracle/jre/bin/java          1         manual mode
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          2         manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  4            /usr/lib/jvm/java-8-oracle/jre/bin/java          3         manual mode
  5            /usr/lib/jvm/java-9-oracle/bin/java              4         manual mode

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

Ahora puede elegir el número para usar como predeterminado. Esto también se puede hacer para otros comandos Java, como el compilador ( javac), el generador de documentación ( javadoc), la herramienta de firma JAR ( jarsigner) y más. Puede usar el siguiente comando, completando el comando que desea personalizar.

sudo update-alternatives --config command

Establecer la JAVA_HOMEvariable de entorno

Muchos programas, como los servidores Java, utilizan la variable de entorno JAVA_HOME para determinar la ubicación de instalación de Java.

Copie la ruta de su instalación preferida y luego abra / etc / environment utilizando Sublime Text o su editor de texto favorito.

sudo subl /etc/environment

Al final de este archivo, agregue la siguiente línea, asegurándose de reemplazar la ruta resaltada con su propia ruta copiada.

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Guarde y cierre el archivo y vuelva a cargarlo: source /etc/environment.
Ahora puede probar si la variable de entorno se ha establecido mediante la ejecución del siguiente comando: echo $JAVA_HOME. Esto devolverá el camino que acaba de establecer.

naXa
fuente