Lista de números de versão principais do formato de arquivo da classe Java?

174

Eu vi essa lista dos principais números de versão do Java em outro post:

  • Java 1.2 usa a versão principal 46
  • Java 1.3 usa a versão principal 47
  • Java 1.4 usa a versão principal 48
  • Java 5 usa a versão principal 49
  • Java 6 usa a versão principal 50
  • Java 7 usa a versão principal 51
  • Java 8 usa a versão principal 52
  • Java 9 usa a versão principal 53
  • Java 10 usa a versão principal 54
  • Java 11 usa a versão principal 55
  • Java 12 usa a versão principal 56
  • Java 13 usa a versão principal 57
  • Java 14 usa a versão principal 58

Referências:

https://blogs.oracle.com/darcy/entry/source_target_class_file_version https://en.wikipedia.org/wiki/Java_class_file#General_layout

Robert Mark Bram
fonte

Respostas:

46

Estes vêm da versão da classe. Se você tentar carregar algo compilado para java 6 em um tempo de execução java 5, obterá o erro, versão de classe incompatível, 50, 49, esperado 49. Ou algo assim.

Veja aqui no byte offset 7 para mais informações.

Informações adicionais também podem ser encontradas aqui .

Michael
fonte
Existe uma maneira de ecoar o número da versão principal (versão da classe) diretamente do javac , sem usar uma classe existente como javap -verbose MyClass?
samis 18/06/19
Não, não existe.
Stephen C
18

Encontrei uma lista de versões do arquivo de classe Java na página da Wikipedia que descreve o formato do arquivo de classe:

http://en.wikipedia.org/wiki/Java_class_file#General_layout

No desvio de bytes 6 e 7, as versões são listadas com a qual Java VM elas correspondem.

Peter
fonte
2

Se você está tendo algum problema com o "compilador de erros do arquivo de classe", é possível resolver isso alterando o JRE do projeto para seu correspondente através do Eclipse.

  1. Caminho de construção
  2. Configurar caminho de construção
  3. Mude a biblioteca para o correspondente da tabela que o amigo mostra por último.
  4. Crie "arquivo jar" e compile e execute.

Eu fiz isso e funcionou.

Jefferson1919
fonte
0

Se você tiver um arquivo de classe em build/com/foo/Hello.class, poderá verificar em qual versão java ele é compilado usando o comando:

javap -v build/com/foo/Hello.class | grep "major"

Exemplo de uso:

$ javap -v build/classes/java/main/org/aguibert/liberty/Book.class | grep major
  major version: 57

De acordo com a tabela no OP, a versão principal 57 significa que o arquivo de classe foi compilado no nível de bytecode do JDK 13

Andy Guibert
fonte