2010-12-14 10 views

Respuesta

11

Eso no es posible de manera confiable, ya que ni siquiera necesita un JDK para compilar un archivo JAR; es solo un archivo ZIP con las clases y un archivo de manifiesto dentro.

Lo que puede averiguar es qué versión de the class file format se utiliza. El número de versión principal se asigna a majorJDK comunicados:

J2SE 6.0 = 50 (0x32 hex) 
J2SE 5.0 = 49 (0x31 hex) 
JDK 1.4 = 48 (0x30 hex) 
JDK 1.3 = 47 (0x2F hex) 
JDK 1.2 = 46 (0x2E hex) 
JDK 1.1 = 45 (0x2D hex) 

Sin embargo, el compilador Java tiene una opción para utilizar el formato de archivo de clase de una versión anterior, que se utiliza con frecuencia para lograr la compatibilidad hacia abajo. Pero si encuentra una versión de archivo de clase con un número mayor de 50, sabe que las clases definitivamente no se compilaron con Java 5 o anterior JDK.

+1

Si bien todo lo que dices es correcto, esto realmente te dice qué compilador compiló tus clases, no qué herramienta de jar jar-ed tus clases. La mayoría de las veces uno asumiría que provienen del mismo conjunto de herramientas. –

+0

La respuesta http://stackoverflow.com/a/3313839/2776843 es mucho mejor. Comprueba eso también – shamanSK

10

La mayoría de los frascos se fabrican utilizando la herramienta "jar" suministrada que viene con el jdk.

En el JDK de SUN, la herramienta "jar" proporcionada agregará una línea "Creado por" en el archivo META-INF/MANIFEST.MF incrustado.

Esa línea especificará la versión del JDK que creó el archivo JAR (en mi caso "-Creado Por: 1.6.0_17 (Sun Microsystems Inc.)")

Otros proveedores de Java tienden a hacer lo mismo.

+0

¿La tarea Ant jar usa internamente la herramienta jar? Porque creo que más archivos JAR se crean con Ant que a través de la herramienta de línea de comandos. –

6

En las jarras MANIFEST.MF puede haber una propiedad Build-Jdk que debería ser lo que está buscando.

+0

Acabo de crear algunos archivos de clase y Build-Jdk no está en el archivo MANIFEST.MF. –

+0

Mmm, puede que tenga razón. Estoy mirando un frasco con Created-By: Apache Maven. Sin embargo, los documentos parecen estar de acuerdo contigo. – Jim

8

Puede extraer los archivos de clase desde el archivo JAR y use el siguiente comando:

javap -verbose SomeClass | grep major 

deben darle el número de versión de los archivos de clase.

Cuestiones relacionadas