Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=1efc8941-c3dc-4ce4-a8cf-fbaee2ccfa2d

Cómo averiguar la versión actual de Java desde tu programa o aplicación

Imagen ornamental

A veces, al programar en Java, puede ser útil encontrar de manera programática la versión de Java que estamos utilizando.

Vamos a ver 2 maneras de conseguirlo, pero antes, una nota importante...

Nomenclatura de Versiones de Java

Hasta Java 8 incluido, la versión de Java no seguía versionado semántico o SemVer (si necesitas saber qué es te lo cuento en este vídeo). El formato hasta Java 9 era de la forma 1.X.Y_Z, donde X e Y indicaban las versiones principal y secundaria, y Z se utilizaba para indicar una versión de actualización. Esta versión de actualización se separaba del resto con un guion bajo "_". Por ejemplo, 1.8.0_23. Una forma bastante peculiar de hacerlo.

A partir de Java 9, la versión de Java sigue SemVer, con el formato habitual X.Y.Z.S, que hace referencia a las versiones principal, secundaria, nivel de actualización y nivel de parche. Por ejemplo, 17.0.5.0.

Método 1: System.getProperty()

La clase System de Java contiene una serie de propiedades estándar que podemos consultar en cualquier momento para averiguar información sobre el sistema en donde se ejecuta nuestra aplicación.

Podemos acceder a cualquiera de ellas utilizando el método getProperty() de la clase System. Así, obtener la versión actual es directo y sencillo:

public static String JavaVersion() {
    return System.getProperty("java.version");
}

¡Listo! Eso nos devuelve una cadena con los 3 primeros números de la versión: principal, secundaria y actualización. Por ejemplo, "17.0.5", o en versiones antiguas de Java, algo como "1.8.0_23".

Esto está bien si solo queremos mostrar esa versión básica en algún lado. Pero si queremos obtener los números individuales nos tenemos que poner a procesar la cadena para extraerlos: ya no es tan directo.

Lo bueno de este método es que funciona en cualquier versión de Java. Lo malo es que es muy limitado. Así que vamos a ver otro...

Método 2: Runtime.version()

Este es el método más directo y sencillo de obtener la versión ya procesada para usarla de manera más directa. La única "pega" es que sólo está disponible a partir de Java 9.

Existe una clase Runtime.Version que permite obtener información sobre la versión a partir de sus métodos.

La manera más directa de obtenerla es la siguiente:

public static String getJavaVersion() {
  String version;
  Runtime.Version rtv = Runtime.version();
  return rtv.toString();
}

Esto te devolverá una cadena estilo "17.0.5+8-jvmci-22.3-b08". Los primeros elementos son la versión principal, la secundaria, la de correcciones y la de parches de seguridad (cuatro números). El resto que va unido con un "+" serían el identificador de la prerelease, el número de build e información adicional sobre el builld.

En realidad esta cadena nos sirve de muy poco, nos interesará más poder obtener la versión principal, y quizá la secundaria, para compararlas con algo, mientras que el resto nos interesará menos. Por lo tanto, es mucho mejor utilizar los métodos de la clase Runtime.Version, que tenemos en la variable rtv.

Estos métodos tienen nombres que se corresponden con los diferentes números descritos antes, aunque a la versión principal le llaman feature() y a la secundaria interim().

Inicialmente existían los métodos major() y minor(), en mi opinión mucho más claros. Pero hoy en día están declarados como obsoletos, refiriéndote a los anteriores en su lugar.

Así que podemos acceder a cualquiera de estos valores. En el siguiente fragmento devolvemos el número de versión de Java con un formato más digerible y parecido al que vimos en el método anterior:

public static String JavaVersion() {
  String version;
  Runtime.Version rtv = Runtime.version();
  version = String.format("%s.%s.%s.%s", rtv.feature(),
              rtv.interim(), rtv.update(), rtv.patch());
  return version;
}

Fíjate en cómo hemos construido una cadena con la versión usando los métodos correspondientes, y nos devolverá algo como "17.0.5.0".

En una aplicación real quizá nos interesaría comparar el valor de las versiones principal y secundaria para comprobar algo (quizá la disponibilidad de una funcionalidad o algo así). Pero se entiende la idea: con esta clase podemos obtener la parte de la versión que nos interese sin tener que parsear la cadena. Mucho más cómodo y fiable.

Recuerda que tenemos la mejor formación online sobre Java en español que vas a encontrar, actualizada a la última versión del lenguaje.

¡Espero que te resulte útil!

José Manuel Alarcón Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José Manuel Alarcón
Archivado en: Lenguajes y plataformas

¿Te ha gustado este post?
Pues espera a ver nuestro boletín...

Suscríbete a la newsletter

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.