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!