有沒有一個命令行工具,最好在JDK中,它可以打印類文件中的所有註釋,或者將特定註釋作爲參數打印?如何通過命令行查看java classfile的註釋?
如果是這樣,是否有一個等同的命令可以運行在一個jar文件中包含的特定類?
我已經搜索了一段時間,沒有運氣。 :(
有沒有一個命令行工具,最好在JDK中,它可以打印類文件中的所有註釋,或者將特定註釋作爲參數打印?如何通過命令行查看java classfile的註釋?
如果是這樣,是否有一個等同的命令可以運行在一個jar文件中包含的特定類?
我已經搜索了一段時間,沒有運氣。 :(
糾正我,如果即時通訊錯了,但我認爲,註釋從編譯器從類中除去,除非您在Annotations本身上使用Annotation @Retention(RetentionPolicy.RUNTIME),信息將不會保留在 類文件。如果註釋在類文件保存下來,你可以使用的javap(JDK的一部分),看看這些:
javap my.package.MyClass
更新:這似乎需要JDK7,JDK6的javap的犯規打印註釋,但您可以使用華盛頓大學網站提供的以下工具提取註釋信息:
在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
1.7+這是正確的答案。 – OscarRyz 2017-10-12 20:39:35
感謝。我正在玩JDK/bin目錄中的工具,並找到了這個工具。這似乎並沒有顯示註釋,但我可以通過文本編輯器看到它:「RuntimeVisibleAnnotations^A^@!L/VersionID;^A^@^Evalue^A^@^P $ Revision: 1.5 $「 –
2010-10-14 13:30:23
我應該按照您的指定添加此批註的@Retention(RetentionPolicy.RUNTIME)。 – 2010-10-14 13:31:40
是否需要運行具有任何附加標記以顯示註釋的'javap'?當我運行'javap java.lang.String'時沒有看到它們。 – 2011-08-22 18:04:33