¿Lista de números de versión principales del formato de archivo de clase Java?

174

Vi esta lista de números de versión principales para Java en otra publicación:

  • Java 1.2 usa la versión principal 46
  • Java 1.3 usa la versión principal 47
  • Java 1.4 usa la versión principal 48
  • Java 5 usa la versión principal 49
  • Java 6 usa la versión principal 50
  • Java 7 usa la versión principal 51
  • Java 8 usa la versión principal 52
  • Java 9 usa la versión principal 53
  • Java 10 usa la versión principal 54
  • Java 11 usa la versión principal 55
  • Java 12 usa la versión principal 56
  • Java 13 usa la versión principal 57
  • Java 14 usa la versión principal 58

Referencias

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

Robert Mark Bram
fuente

Respuestas:

46

Estos provienen de la versión de clase. Si intenta cargar algo compilado para java 6 en un tiempo de ejecución de java 5, obtendrá el error, la versión de clase incompatible, obtuvo 50, se esperaba 49. O algo así.

Vea aquí en el byte offset 7 para más información.

Información adicional también se puede encontrar aquí .

Miguel
fuente
¿Hay alguna manera de hacer eco del número de versión principal (versión de clase) directamente de javac , sin usar una clase existente como javap -verbose MyClass,?
samis
No, no lo hay.
Stephen C
2

Si tiene algún problema sobre el "compilador de errores del archivo de clase", es posible resolver esto cambiando el JRE del proyecto a su correspondiente a través de Eclipse.

  1. Construir camino
  2. Configurar ruta de compilación
  3. Cambie la biblioteca al corresponsal de la tabla que el amigo muestra al final.
  4. Crear "archivo jar" y compilar y ejecutar.

Hice eso y funcionó.

Jefferson1919
fuente
0

Si tiene un archivo de clase en build/com/foo/Hello.class, puede verificar en qué versión de Java se compila utilizando el comando:

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

Ejemplo de uso:

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

Según la tabla en el OP, la versión principal 57 significa que el archivo de clase se compiló al nivel de código de bytes JDK 13

Andy Guibert
fuente