domingo, 28 de abril de 2013

"Instalar" Java: update-alternatives

Para Open SuSE,funciona el RPM que está en el sitio de Oracle (Dicho sea de paso, la navegabilidad del sitio siempre me ha parecido disfuncional)
Se instala con un simple rpm -ivh siendo administrador.

Acá viene lo bueno: Recuerdo que alguna vez usando el RPM, al final de la instalación empezaba un script que automatizaba la tarea. O no recuerdo si fue en Fedora, pero el caso que esta última vez lo único que hizo el instalador es copiar los paquetes a una dirección concreta: /usr/java/jdk1.7.0_21/ (La cual de hecho me parece "un poco incorrecta")

La cuestión es que en esta ubicación solo podemos ejecutar los archivos con su ruta absoluta, porque no se encuentran en el PATH del sistema. Lo único que ya esta en un PATH válido es jcontrol, una utilidad para configurar monitorear la máquina virtual de java.
Si bien podriamos agregar esa ruta, desinstalar el jdk que trae por defecto y así, creo que la forma más elegante es cambiarlo con update-alternatives

Update-alternativas permite tener instalado en el sistema varios programas iguales en características (Como en este caso, dos máquinas virtuales de java), pudiendo escoger uno para tal o cual ocasión, de una manera limpia, mediante un sistema de enlaces simbólicos.
Dicho esto, lo único que necesitamos es ejecutar:
update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_21/bin/java 200 \
--slave /usr/bin/jar jar /usr/java/jdk1.7.0_21/bin/jar \
--slave /usr/bin/jarsigner jarsigner /usr/java/jdk1.7.0_21/bin/jarsigner \
--slave /usr/bin/javadoc javadoc /usr/java/jdk1.7.0_21/bin/javadoc \
--slave /usr/bin/javah javah /usr/java/jdk1.7.0_21/bin/javah \
--slave /usr/bin/javap javap /usr/java/jdk1.7.0_21/bin/javap

Una vez hecho esto, update-alternatives --config java bastará para escoger cuál es la versión de java que usaremos: Si la que traía por defecto o la que acabamos de instalar.
La utilidad de usar la opción --slave es que creará una especie de grupo alternativa, con solo escoger java, todas las demás opciones será escogidas con él

En Open SuSE me dió error incluir javac dentro del grupo, por lo que basta con eliminarlo e incluirlo aparte

update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.7.0_21/bin/javac 10.

Como no había ninguna otra alternativa instalada, automáticamente lo escogió a él.

Basado parcialmente en How to setup up a new JDK with update-alternatives?

Otros apuntes interesantes

Otros apuntes interesantes