2010-10-14 13 views
21

¿Existe una herramienta de línea de comandos, preferiblemente en el JDK, que, o bien imprime todas las anotaciones en un archivo de clase o lleva una anotación específica como argumento para imprimir?¿Cómo ver la anotación de java classfile a través de la línea de comando?

Si es así, ¿hay un comando equivalente que se puede ejecutar en un archivo JAR para una clase específica contenida dentro?

He buscado en Google este por un tiempo y no tuvo suerte. :(

Respuesta

11

Corrígeme si estoy equivocado, pero pensé que el compilador elimina las anotaciones de las clases, a menos que use Annotation @Retention (RetentionPolicy.RUNTIME) en las Anotaciones en sí, la información no se conservará . en el archivo de clase Si las anotaciones se conservan en el archivo de clase, puede utilizar javap (parte del JDK) para ver los:

javap my.package.MyClass 

actualización: Esta parece necesitar JDK7, javap de JDK6 duerma imprimir las anotaciones , pero se puede usar las siguientes herramientas de la Universidad de la página web de Washington para extraer la información de anotación:

Annotation-utilities

+0

Gracias por esto. Estaba jugando con las herramientas en el directorio JDK/bin y encontré este. Esto no parece mostrar la anotación de embargo, pero puedo ver a través de un editor de texto: "RuntimeVisibleAnnotations^A^@ L /VersionID;^A^@^Evalue^A^@^P $ Revision: 1.5 $ " –

+0

Debo añadir que esta anotación tiene @Retention (RetentionPolicy.RUNTIME) como usted especificó. –

+1

¿Es necesario ejecutar 'javap' con cualquier indicador adicional para que se muestren las anotaciones? No los veo cuando ejecuto 'javap java.lang.String'. –

21

El uso del indicador -verbose o -v con javap versión 1.7 o posterior mostrará las anotaciones retenidas.

Ejemplo:

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 
+0

Para 1.7+ esta es la respuesta correcta. – OscarRyz

Cuestiones relacionadas