Как проверить версию jdk, используемую для компиляции файла .class

Возможный дубликат:
Инструмент для чтения и отображения версий Java.class

Я пытаюсь отлаживать

"Недопустимый номер версии в .class файле

ошибка в java, есть ли способ проверить, в какой версии находятся файлы .class?

Я использую JRE1.5.0_6, но мой JDK - версия 1.6.0_13.

Я компилирую с режимом совместимости, установленным равным 1,5 в eclipse, который, как я думал, будет работать...

Ответ 1

Вы ищете это в командной строке (для класса MyClass):

В Unix/Linux:

javap -verbose MyClass | grep "major"

В Windows:

javap -verbose MyClass | findstr "major"

Вы хотите получить основную версию из результатов. Вот несколько примеров:

  • Java 1.2 использует основную версию 46
  • Java 1.3 использует основную версию 47
  • Java 1.4 использует основную версию 48
  • Java 5 использует основную версию 49
  • Java 6 использует основную версию 50
  • Java 7 использует основную версию 51
  • Java 8 использует основную версию 52
  • Java 9 использует основную версию 53
  • Java 10 использует основную версию 54

Ответ 2

Btw, причина, по которой у вас возникают проблемы, заключается в том, что java-компилятор распознает два флажка версии. Существует -source 1.5, который предполагает исходный код java 1.5 уровня и -target 1.5, который будет отображать файлы классов, совместимые с Java 1.5. Вы, вероятно, захотите использовать оба этих переключателя, но вам определенно нужно -target 1.5; попробуйте дважды проверить, что затмение делает правильные вещи.

Ответ 3

Бесплатный инструмент JarCheck здесь

Ответ 4

Вы можете попробовать jclasslib:

https://github.com/ingokegel/jclasslib

Хорошо, что он может ассоциироваться с расширением *.class.

Ответ 5

Предоставляет ли флаг -verbose вашей команде java полезную информацию? Если нет, возможно, java -X показывает что-то конкретное для вашей версии, которое могло бы помочь?