A jar
è semplicemente un contenitore. È un archivio di file tar
. Mentre a jar
può contenere informazioni interessanti contenute nella sua gerarchia META-INF , non ha l'obbligo di specificare la vendemmia delle classi all'interno dei suoi contenuti. Per questo, è necessario esaminare i class
file in essa contenuti.
Come ha detto Peter Lawrey nel commento alla domanda originale, non puoi necessariamente sapere quale versione di JDK ha creato un determinato class
file, ma puoi scoprire la versione della classe di codice byte del class
file contenuta in a jar
.
Sì, questo fa schifo, ma il primo passo è estrarre una o più classi dal file jar
. Per esempio:
$ jar xf log4j-1.2.15.jar
Su Linux, Mac OS X o Windows con Cygwin installato, il comando file (1) conosce la versione della classe.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
O in alternativa, usando javap
dal JDK come @ jikes.thunderbolt sottolinea giustamente:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
E se sei relegato in un Windows
ambiente senza file
ogrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, concorderò che javap
dirà molto di più su un determinato class
file rispetto alla domanda originale.
Ad ogni modo, una versione di classe diversa, ad esempio:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
Il numero maggiore della versione della classe corrisponde alle seguenti versioni JDK di Java:
- 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