Порой при запуске java класса/jar/приложения и т.д. можно "словить"
java.lang.UnsupportedClassVersionError: название класса :
Unsupported major.minor version 51.0
Причина заключается в том, что класс был скомпилирован на версии jdk более новой, чем та, на которой этот класс теперь запускается. Например, скомпилирован на 1.7, а запускается на 1.6 и т.п.
Узнать текущую версию jdk можно консольной командой java -version
А вот как определить, какой версии class-файл? Узнать версию jdk, использованную при компиляции, можно по числу в описании ошибки (51, 50 и т.п.) или по самому class-файлу. Любой класс имеет определённую структуру (детали - в документации по его формату, например, https://docs.oracle.com/javase/specs/jvms/se6/html/ClassFile.doc.html#80959). В частности, начало выглядит примерно так:
CA FE BA BE 00 00 00 2E
Файл начинает с magic number CAFEBABE, а за ним следуют два short-а, составляющие minor и major части версии соответственно.
Поэтому можно открыть class-файл в hex-редакторе, найти значение и определить версию по следующей таблице:
Комментариев нет:
Отправить комментарий