En este artículo voy a explicar rápidamente cómo detectar la versión de Java instalada en un servidor Linux.
Veamos directamente algunos ejemplos.
Ejemplo 1: un servidor que no posee Java instalado
El primer paso consiste en verificar si existe algún comando llamado "java" en las rutas a ejecutables del entorno actual:
root@linuxito:~# which java root@linuxito:~#
No hay coincidencias, por lo que si se intenta ejecutar "java" no se encuentra el comando:
root@linuxito:~# java -version -bash: java: command not found
Sin embargo es posible que Java esté instalado, pero el binario no esté en un ruta del entorno actual. Por ejemplo, cuando está instalado sólo para proveer el entorno de ejecución Java para un servidor Web (Glassfish, Jetty, Tomcat).
El último paso consiste en buscar un archivo ejecutable llamado "java" en todo el filesystem:
root@linuxito:~# find / -name java -type f -executable root@linuxito:~#
No existe en todo el servidor un archivo ejecutable llamado "java". Por ende, este servidor Debian no tiene Java instalado.
Ejemplo 2: un servidor que posee JRE 1.7
En este caso, el binario java
se encuentra en la ruta /usr/local/j2sdk/bin/java
:
[root@lennart-os ~]# which java /usr/local/j2sdk/bin/java
Se trata de un servidor CentOS con la versión 1.7 de Oracle:
[root@lennart-os ~]# java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
Y es el único instalado en el sistema (/usr/local/j2sdk
es un enlace simbólico):
[root@lennart-os ~]# find / -name java -type f -executable /usr/local/jdk1.7.0_51/bin/java /usr/local/jdk1.7.0_51/jre/bin/java [root@lennart-os ~]# file /usr/local/j2sdk /usr/local/j2sdk: symbolic link to `jdk1.7.0_51/'
Ejemplo 3: un servidor posee Java pero no está en el PATH
En este caso, el sistema posee una versión de Java instalada en un directorio fuera del PATH
. Sólo para propósito de proveer el entorno de ejecución Java a un servidor HTTP:
root@debian:~# which java root@debian:~#
Al buscar en el filesystem, se encuentran binarios ejecutables de nombre "java":
root@debian:~# find / -name java -type f -executable /opt/bostasoft/bostaapp-2.5.27/jre-32/bin/java /opt/bostasoft/bostaapp-2.5.27/jre/bin/java
Al no estar en el PATH
, es necesario especificar toda la ruta para consultar la versión:
root@debian:~# /opt/bostasoft/bostaapp-2.5.27/jre/bin/java -version java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)
Se trata de Java 1.6. Este es el caso típico en el que cierta aplicación depende de una versión específica de Java, por lo que este debe ser instalado por fuera del gestor de paquetes, en un directorio local de dicha aplicación.
Ejemplo 3: un servidor que posee Java instalado desde paquete
Cuando Java es instalado desde paquete , el binario se encuentra en un directorio protegido del servidor (típicamente /usr/bin
):
root@devuan:~# which java /usr/bin/java
Se observa que se trata de la versión 1.7 de OpenJDK:
root@devuan:~# java -version java version "1.7.0_111" OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1) OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
Es posible determinar si el paquete está instalado utilizando dpkg
:
root@devuan:~# dpkg -l | grep openjdk ii openjdk-7-jre:amd64 7u111-2.6.7-1~deb8u1 amd64 OpenJDK Java runtime, using Hotspot JIT ii openjdk-7-jre-headless:amd64 7u111-2.6.7-1~deb8u1 amd64 OpenJDK Java runtime, using Hotspot JIT (headless)
ii
indica que el paquete openjdk-7-jre
está instalado.
Además se trata de la única versión instalada (/usr/bin/java
es un enlace simbólico):
root@devuan:~# find / -name java -type f -executable /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java root@devuan:~# file /usr/bin/java /usr/bin/java: symbolic link to /etc/alternatives/java root@devuan:~# ls -l /usr/bin/java lrwxrwxrwx 1 root root 22 Nov 3 09:01 /usr/bin/java -> /etc/alternatives/java root@devuan:~# ls -l /etc/alternatives/java lrwxrwxrwx 1 root root 46 Nov 3 09:01 /etc/alternatives/java -> /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java