2010-12-14 8 views

risposta

11

Questo non è possibile in modo affidabile, poiché non è nemmeno necessario un JDK per creare un file JAR - è solo un file ZIP con le classi e un file manifest all'interno.

Che cosa si può scoprire è la versione di the class file format utilizzata. Il numero di versione principale mappe di majorJDK release:

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) 

Tuttavia, il compilatore Java è la possibilità di utilizzare il formato di file di classe di una versione precedente, che viene spesso utilizzato per ottenere la compatibilità verso il basso. Ma se trovi un numero maggiore di 50 nella versione del file di classe, sai che le classi non sono state compilate con un JDK Java 5 o precedente.

+1

Mentre tutto ciò che dici è corretto, questo in realtà ti dice quale compilatore ha compilato le tue classi, non quale strumento jar ha modificato le tue classi. La maggior parte delle volte si presume che provengano dallo stesso toolkit. –

+0

La risposta http://stackoverflow.com/a/3313839/2776843 è molto meglio. Controlla anche questo. – shamanSK

10

La maggior parte dei vasi viene creata utilizzando lo strumento "jar" fornito con jdk.

Nel JDK di SUN lo strumento "jar" fornito aggiungerà una riga "Created-By" nel file META-INF/MANIFEST.MF incorporato.

Quella linea specificherà la versione del JDK che ha creato il JAR (nel mio caso "Creato-By: 1.6.0_17 (Sun Microsystems Inc.)")

Altri fornitori Java tendono a fare lo stesso.

+0

Il task Ant jar utilizza lo strumento jar internamente? Perché penso che più file JAR siano costruiti con Ant piuttosto che tramite lo strumento da riga di comando. –

6

In Jars MANIFEST.MF potrebbe esserci una proprietà Build-Jdk che dovrebbe essere quello che stai cercando.

+0

Ho appena inserito alcuni file di classe e Build-Jdk non è presente nel file MANIFEST.MF. –

+0

Mmm, potresti avere ragione. Sto guardando un barattolo con Created-By: Apache Maven. Tuttavia, i documenti sembrano essere d'accordo con te. – Jim

8

È possibile estrarre i file di classe dal file jar e utilizzare il seguente comando:

javap -verbose SomeClass | grep major 

dovrebbe dare il numero di versione dei file di classe.

Problemi correlati