【问题标题】:How to view annotation of java classfile via command line?如何通过命令行查看java类文件的注释?
【发布时间】:2011-04-25 09:21:55
【问题描述】:

是否有一个命令行工具,最好是在 JDK 中,可以打印类文件中的所有注释或将特定注释作为参数打印?

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

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

【问题讨论】:

    标签: java class command-line jar annotations


    【解决方案1】:

    在 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
    

    【讨论】:

      【解决方案2】:

      如果我错了,请纠正我,但我认为,编译器会从类中剥离注释,除非您在注释本身上使用注释 @Retention(RetentionPolicy.RUNTIME),否则信息将不会保留在类中文件。 如果注释保留在类文件中,您可以使用 javap(jdk 的一部分)来查看:

      javap my.package.MyClass
      

      更新:这个好像需要JDK7,JDK6的javap不打印注解,但是可以使用华盛顿大学官网的以下工具提取注解信息:

      Annotation-utilities

      【讨论】:

      • 谢谢。我在玩 JDK/bin 目录中的工具,发现了这个。虽然这似乎没有显示注释,但我可以通过文本编辑器看到它:“RuntimeVisibleAnnotations^A^@!L/VersionID;^A^@^Evalue^A^@^P$Revision: 1.5 美元"
      • 我应该添加这个注释有你指定的@Retention(RetentionPolicy.RUNTIME)。
      • 是否需要运行 javap 并带有任何其他标志才能显示注释?当我运行 javap java.lang.String 时没有看到它们。
      • @amanda:检查答案中的更新,您是否使用 jdk
      • -v 选项对我来说是必需的(除了 jdk 7)
      猜你喜欢
      • 2011-03-15
      • 1970-01-01
      • 2018-09-10
      • 2013-07-17
      • 2016-10-10
      • 2021-12-21
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多