Как просмотреть аннотацию java classfile через командную строку?
Есть ли инструмент командной строки, желательно в JDK, который либо печатает все аннотации в файле классов, либо принимает конкретную аннотацию в качестве аргумента для печати?
Если да, существует ли эквивалентная команда, которая может быть запущена в файле jar для определенного класса, содержащегося внутри?
Я искал это какое-то время и не повезло.: (
Ответы
Ответ 1
Исправьте меня, если я ошибаюсь, но я подумал, что аннотации удаляются из классов компилятором, если вы не используете Annotation @Retention (RetentionPolicy.RUNTIME) в самих аннотациях, информация не будет сохранена в классе файл.
Если аннотации сохранены в файле классов, вы можете использовать javap (часть jdk), чтобы увидеть их:
javap my.package.MyClass
Обновление: похоже, JDK7, JDK6 javap не печатает аннотации, но вы можете использовать следующие инструменты на веб-сайте Университета штата Вашингтон, чтобы извлечь информацию о аннотации:
Аннотации-утилиты
Ответ 2
Используя флаг -verbose или -v с javap версии 1.7 или новее, будут показаны сохраненные аннотации.
Пример:
javap -p -v ./services/target/windup-web-services/WEB-INF/classes/org/jboss/windup/web/services/model/RegisteredApplication.class
#50 = Utf8 Ljavax/persistence/Column;
#64 = Utf8 Lorg/jboss/windup/web/services/validators/NotBlankConstraint;
#67 = Utf8 Ljavax/validation/constraints/Size;
...
private java.lang.String title;
descriptor: Ljava/lang/String;
flags: ACC_PRIVATE
RuntimeVisibleAnnotations:
0: #50(#62=I#63)
1: #64(#65=s#66)
2: #67(#68=I#69,#70=I#63,#65=s#71