A jar
é apenas um recipiente. É um arquivo de arquivo à la tar
. Embora um jar
possa ter informações interessantes contidas em sua hierarquia META-INF , ele não tem obrigação de especificar o vintage das classes dentro de seu conteúdo. Para isso, é preciso examinar os class
arquivos nele contidos.
Como Peter Lawrey mencionou no comentário à pergunta original, você não pode necessariamente saber qual versão do JDK construiu um determinado class
arquivo, mas pode descobrir a versão da classe de código de bytes do class
arquivo contido em a jar
.
Sim, isso meio que é péssimo, mas o primeiro passo é extrair uma ou mais classes do jar
. Por exemplo:
$ jar xf log4j-1.2.15.jar
No Linux, Mac OS X ou Windows com o Cygwin instalado, o comando file (1) conhece a versão da classe.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
Ou, alternativamente, usar javap
do JDK como @ jikes.thunderbolt indica apropriadamente:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
E se você for relegado a um Windows
ambiente sem um file
ou outrogrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, vou concordar que javap
dirá muito mais sobre um determinado class
arquivo do que a pergunta original.
Enfim, uma versão de classe diferente, por exemplo:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
O número principal da versão da classe corresponde às seguintes versões do Java JDK:
- 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