En proyectos Java se suele optar por la reutilización de clases o el uso de clases ya compiladas a modo de librerías. Puede ser que se tenga el fichero class de la misma, pero no el código fuente, por lo que se va heredando hasta que se utiliza una versión del JDK (Java Development Kit) de Java superior y deja de funcionar. En estos casos es interesante saber cuál es la versión del JDK de un fichero class que esté dando el error.
El error suele ser el siguiente.
Unsupported major.minor version
Por suerte, en el fichero class suele estar incluida esta información, sólo es necesario un decompilador de Java. Y de nuevo por suerte, en cada distribución del JDK suele estar incluido un decompilador en la carpeta bin. El ejecutable del decompilador es javap. Se puede utilizar en conjunto con una tubería desde la línea de comandos para recuperar directamente el valor de la Major Version, de la siguiente manera, donde NombreClase.class es el nombre de la clase que se quiere comprobar y ver versión de java y la cual se encuentra en la ruta actual:
En Windows.
javap -verbose NombreClase.class | findstr "major"
En Linux.
javap -verbose NombreClase.class | grep "major"
Comprobar versión Java a partir de Major Version
Esta instrucción devuelve un número, el cual sólo faltará comprobarlo en la siguiente tabla para comprobar con qué versión se corresponde y ya se habrá obtenido la versión del JDK de un fichero class de Java.
Se puede ver que, con cada versión del JDK, se va incrementando en uno su Major Version. Independientemente si es de Oracle Java o de OpenJava.
Major Version | JDK Version |
---|---|
45.3 | 1.1 |
46 | 1.2 |
47 | 1.3 |
48 | 1.4 |
49 | 5 (1.5) |
50 | 6 (1.6) |
51 | 7 (1.7) |
52 | 8 (1.8) |
53 | 9 |
54 | 10 |
55 | 11 |
56 | 12 |
57 | 13 |
58 | 14 |
59 | 15 |
60 | 16 |
61 | 17 |
62 | 18 |
63 | 19 |
64 | 20 |
65 | 21 |