2010-12-14 64 views

Répondre

11

Ce n'est pas possible de manière fiable, puisque vous n'avez même pas besoin d'un JDK pour créer un fichier JAR - c'est juste un fichier ZIP avec les classes et un fichier manifest à l'intérieur.

Ce que vous pouvez savoir, c'est quelle version de the class file format est utilisée. Le numéro de version des cartes à majorJDK versions:

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) 

Cependant, le compilateur java a une option pour utiliser le format de fichier de classe d'une version précédente, qui est fréquemment utilisé pour assurer la compatibilité vers le bas. Mais si vous trouvez un nombre majeur de 50, vous savez que les classes n'ont certainement pas été compilées avec un JDK Java 5 ou antérieur.

+1

Alors que tout ce que vous dites est correct, cela vous dit vraiment quel compilateur a compilé vos classes, et non ce que jar tool a jar-ed vos classes. La plupart du temps, on suppose qu'ils proviennent de la même boîte à outils. –

+0

La réponse http://stackoverflow.com/a/3313839/2776843 est beaucoup mieux. Vérifiez cela aussi. – shamanSK

10

La plupart des bocaux sont construits à l'aide de l'outil «jar» fourni avec le jdk.

Dans le JDK de SUN, l'outil "jar" fourni ajoute une ligne "Created-By" dans le fichier META-INF/MANIFEST.MF incorporé.

Cette ligne précisera la version du JDK qui a créé le JAR (dans mon cas "Créé par-: 1.6.0_17 (Sun Microsystems Inc.)")

D'autres fournisseurs Java ont tendance à faire la même chose.

+0

La tâche Ant Jar utilise-t-elle l'outil JAR en interne? Parce que je pense que plus de fichiers JAR sont construits avec Ant que via l'outil de ligne de commande. –

6

Dans les JARES MANIFEST.MF il peut y avoir une propriété Build-Jdk qui devrait être ce que vous cherchez.

+0

J'ai juste jar'd jusqu'à quelques fichiers de classe et Build-Jdk n'est pas du tout dans le fichier MANIFEST.MF. –

+0

Mmm, vous avez peut-être raison. Je regarde un pot avec Créé par: Apache Maven. Les docs semblent être d'accord avec vous cependant. – Jim

8

Vous pouvez extraire les fichiers de classe du fichier jar et utilisez la commande suivante:

javap -verbose SomeClass | grep major 

devrait vous donner le numéro de version des fichiers de classe.