A jar
es simplemente un contenedor. Es un archivo de archivo a la tar
. Si bien jar
puede tener información interesante dentro de su jerarquía META-INF , no tiene la obligación de especificar la antigüedad de las clases dentro de su contenido. Para eso, uno debe examinar los class
archivos allí.
Como Peter Lawrey mencionó en el comentario a la pregunta original, no necesariamente puede saber qué versión de JDK creó un class
archivo determinado , pero puede encontrar la versión de clase de código de byte del class
archivo contenido en a jar
.
Sí, esto apesta, pero el primer paso es extraer una o más clases del jar
. Por ejemplo:
$ jar xf log4j-1.2.15.jar
En Linux, Mac OS X o Windows con Cygwin instalado, el comando file (1) conoce la versión de la clase.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
O, alternativamente, usar javap
desde el JDK como @ jikes.thunderbolt señala acertadamente:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
Y si está relegado a un Windows
entorno sin file
ogrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, coincidiré en que javap
contará mucho más sobre un class
archivo dado que la pregunta original formulada.
De todos modos, una versión de clase diferente, por ejemplo:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
El número principal de la versión de clase corresponde a las siguientes versiones de Java JDK:
- 45.3 = Java 1.1
- 46 = Java 1.2
- 47 = Java 1.3
- 48 = Java 1.4
- 49 = Java 5
- 50 = Java 6
- 51 = Java 7
- 52 = Java 8
- 53 = Java 9