A jarn'est qu'un conteneur. Il s'agit d'une archive de fichiers à la tar. Même si un jarpeut contenir des informations intéressantes dans sa hiérarchie META-INF , il n'a aucune obligation de spécifier le millésime des classes dans son contenu. Pour cela, il faut examiner les classfichiers qui s'y trouvent.
Comme Peter Lawrey l'a mentionné dans le commentaire de la question d'origine, vous ne pouvez pas nécessairement savoir quelle version JDK a construit un classfichier donné , mais vous pouvez trouver la version de la classe de code octet du classfichier contenu dans a jar.
Oui, c'est un peu nul, mais la première étape consiste à extraire une ou plusieurs classes du jar. Par exemple:
$ jar xf log4j-1.2.15.jar
Sous Linux, Mac OS X ou Windows avec Cygwin installé, la commande file (1) connaît la version de la classe.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
Ou bien, utiliser à javappartir du JDK comme @ jikes.thunderbolt indique avec justesse:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
Et si vous êtes relégué dans un Windowsenvironnement sans fileougrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, je conviens que javapcela en dira beaucoup plus sur une donnéeclass fichier que la question initiale posée.
Quoi qu'il en soit, une version de classe différente, par exemple:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
Le numéro majeur de version de classe correspond aux versions JDK Java suivantes:
- 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