domingo, diciembre 29, 2013

Ubuntu 12.04: switch java version

En ocasiones necesitas poder cambiar fácilmente la versión actual de tu jdk para probar bajo diferentes JVMs.

Si solamente quieres actualizar la versión la mejor opción es usar un repo que te sirve las versiones más habituales (open, oracle, 6 y 7) y en este caso sólo tendrás que hacer lo siguiente:

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

Una vez descargadas/instaladas las versiones que necesites, en ubuntu sólo tendrás que usar:

update-java-alternatives

Si por el contrario tienes/quieres descargar las jvms a mano, basta con descomprimirlas en la ruta /usr/lib/jvm y a partir de ahi la historia es la misma tanto si vienes del repo como si has hecho la descarga manualmente.

Las versiones disponibles por defecto salen de los ficheros .XX.jinfo que están en la carpeta /usr/lib/jvm donde se debe descomprimir las diferentes maquinas virtuales que se quiera que esten disponibles.

El fichero .java-7-oracle.jinfo (por ejemplo) estará si haces la instalación con el repo, en caso contrario tienes que hacerlo tu mismo (busca por internet para saber que tienes que poner).

Ahora puedes ver las alternativas que estan "declaradas":

 sudo update-java-alternatives -l
 java-1.6.0-openjdk-i386 1061 /usr/lib/jvm/java-1.6.0-openjdk-i386
 java-7-oracle 1062 /usr/lib/jvm/java-7-oracle
 jdk1.6.0_45 1062 /usr/lib/jvm/jdk1.6.0_45

Y cambiar tanto java, javac, como toda su utileria a la opción deseada haciendo:


sudo update-java-alternatives -s jdk1.6.0_45

Normalmente con esto es suficiente y puedes comprobarlo haciendo:


 java -version
 java version "1.6.0_45"
 Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
 Java HotSpot(TM) Server VM (build 20.45-b01, mixed mode)

No obstante es posible que al intentar ejecutar la actualización de las variables que salgan un porron de mensajes como este:

 update-alternatives: error: alternative /usr/lib/jvm/jdk1.6.0_45/jre/bin/java for java not registered, not setting.

En este caso no tienes más opción que registrar las alternativas manualmente (lo mejor es hacer un pequeño script incluyendo todos los errores iguales):


sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_45/jre/bin/java" 1 --force

Tienes que tener en cuenta que el funcionamiento de las "alternatives" se basa en crear enlaces simbólicos (accesos directos) siguiendo el siguiente patrón:


/usr/bin/java -> 
/etc/alternatives/java -> 
/usr/lib/jvm/jdk1.6.0_45/jre/bin/java

Una vez arreglados esos problemas si vuelves a hacer el update-java-alternatives debería ir todo bien y la versión estaría perfectamente cambiada.

NOTA:

En algunos casos más allá de incluir los ejecutables en el /usr/bin hace falta declarar un JAVA_HOME.

Esto no lo has hecho con todo lo anterior así que si lo necesitas debes editarlo en /etc/environment:

JAVA_HOME="/usr/lib/jvm/jdk1.6.0_45"

Para que este cambio surga efecto debes hacer logout como mínimo.

No hay comentarios: