2010-10-14 71 views
21

有没有一个命令行工具,最好在JDK中,它可以打印类文件中的所有注释,或者将特定注释作为参数打印?如何通过命令行查看java classfile的注释?

如果是这样,是否有一个等同的命令可以运行在一个jar文件中包含的特定类?

我已经搜索了一段时间,没有运气。 :(

回答

11

纠正我,如果即时通讯错了,但我认为,注释从编译器从类中除去,除非您在Annotations本身上使用Annotation @Retention(RetentionPolicy.RUNTIME),信息将不会保留在 类文件。如果注释在类文件保存下来,你可以使用的javap(JDK的一部分),看看这些:

javap my.package.MyClass 

更新:这似乎需要JDK7,JDK6的javap的犯规打印注释,但您可以使用华盛顿大学网站提供的以下工具提取注释信息:

Annotation-utilities

+0

感谢。我正在玩JDK/bin目录中的工具,并找到了这个工具。这似乎并没有显示注释,但我可以通过文本编辑器看到它:“RuntimeVisibleAnnotations^A^@!L /VersionID;^A^@^Evalue^A^@^P $ Revision: 1.5 $“ – 2010-10-14 13:30:23

+0

我应该按照您的指定添加此批注的@Retention(RetentionPolicy.RUNTIME)。 – 2010-10-14 13:31:40

+1

是否需要运行具有任何附加标记以显示注释的'javap'?当我运行'javap java.lang.String'时没有看到它们。 – 2011-08-22 18:04:33

21

在javap版本1.7或更高版本中使用-verbose或-v标志将显示保留的注释。

实施例:

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

1.7+这是正确的答案。 – OscarRyz 2017-10-12 20:39:35