Кто-нибудь из вас знает инструмент, который будет искать файлы .class и затем отображать их скомпилированные версии?
Я знаю, что вы можете просматривать их по отдельности в шестнадцатеричном редакторе, но мне нужно просмотреть много файлов классов (что-то в моем гигантском приложении по какой-то причине компилируется на Java6).
jvm-bytecode
SCdF
источник
источник
Ответы:
Используйте инструмент javap , поставляемый с JDK.
-verbose
Вариант будет печатать номер версии файла класса.Чтобы показать только версию:
источник
Достаточно легко прочитать подпись файла класса и получить эти значения без стороннего API. Все, что вам нужно сделать, это прочитать первые 8 байтов.
Для файла класса версии 51.0 (Java 7) открывающими байтами являются:
... где 0xCAFEBABE - это магические байты, 0x0000 - дополнительная версия, а 0x0033 - основная версия.
Поиск файлов классов по каталогам ( File ) и архивам ( JarFile ) является тривиальным.
В блоге Oracle Джо Дарси перечислены версии класса для сопоставлений версий JDK вплоть до Java 7:
источник
На Unix-подобных
Также будет указан тип и версия файла. Вот как выглядит результат:
источник
Если вы работаете в системе unix, вы можете просто сделать
(в моей версии файла написано «скомпилированные данные класса Java, версия 50.0» для классов java6).
источник
file *.class
производит:ClassName.class: compiled Java class data, version 50.0 (Java 1.6)
Еще одна проверка версии Java
источник
В eclipse, если у вас нет прикрепленных источников. Обратите внимание на первую строку после кнопки прикрепления источника.
// Скомпилировано из CDestinoLog.java ( версия 1.5: 49.0, супер бит )
источник
Может быть, это тоже кому-то поможет. Похоже, есть более простой способ использовать версию JAVA для компиляции / сборки .class. Этот способ полезен для самопроверки приложения / класса в версии JAVA.
Я просмотрел библиотеку JDK и нашел эту полезную константу: com.sun.deploy.config.BuiltInProperties.CURRENT_VERSION . Не знаю, с каких пор это в JAVA JDK.
Пробуя этот фрагмент кода для нескольких констант версии, я получаю результат ниже:
ЦСИ:
вывод:
В байт-коде класса действительно хранится константа - см. Выделенную красным часть Main.call - константа, хранящаяся в байт-коде .class
Константа находится в классе, используемом для проверки того, не устарела ли версия JAVA (см. Как Java проверяет, что она устарела ) ...
источник
Решение на основе Java, использующее магические номера версий . Ниже он используется самой программой для определения версии своего байт-кода.
источник
Этот класс Java сканирует содержимое всего содержимого WAR и JAR, найденных в списке каталогов, и печатает сводку версий файлов класса Java для каждого компонента, включая каждый JAR в WAR:
источник