2010-10-14 4 views
21

क्या कोई कमांड लाइन उपकरण है, जो जेडीके में प्राथमिकता से है, या तो क्लासफ़ाइल में सभी एनोटेशन प्रिंट करता है या प्रिंट करने के लिए तर्क के रूप में एक विशिष्ट एनोटेशन लेता है?कमांड लाइन के माध्यम से जावा क्लासफाइल की एनोटेशन कैसे देखें?

यदि हां, तो क्या एक समकक्ष कमांड है जो किसी विशिष्ट वर्ग के लिए जार फ़ाइल पर चलाया जा सकता है?

मैंने थोड़ी देर के लिए इसे गुगल किया है और कोई भाग्य नहीं है। :(

उत्तर

11

अगर मैं गलत हूं, तो मुझे सही करें, लेकिन मैंने सोचा कि, एनोटेशन को संकलन द्वारा कक्षाओं से अलग कर दिया जाता है, जब तक कि आप एनोटेशन पर रीटेशन (रीटेंशन पॉलिसी.आरयूएनटीआईएमईएम) का उपयोग न करें, जानकारी संरक्षित नहीं होगी । वर्ग फ़ाइल में एनोटेशन classfile में संरक्षित कर रहे हैं, तो आप javap (JDK का हिस्सा) उन को देखने के लिए उपयोग कर सकते हैं:

javap my.package.MyClass 

अपडेट: यह JDK7 जरूरत के लिए, JDK6 के javap does not को एनोटेशन प्रिंट लगता है , लेकिन आप एनोटेशन जानकारी निकालने के लिए वाशिंगटन विश्वविद्यालय से निम्नलिखित टूल का उपयोग कर सकते हैं:

Annotation-utilities

+0

इस के लिए धन्यवाद। मैं जेडीके/बिन निर्देशिका में उपकरण के साथ खेल रहा था और इसे पाया। यह एनोटेशन को प्रदर्शित नहीं करता है, लेकिन मैं इसे एक टेक्स्ट एडिटर के माध्यम से देख सकता हूं: "रनटाइम विज़िबलएनोटेशंस^ए^@! एल <पैकेज हटाया गया>/संस्करण आईडी;^ए^@^इवल्यू^ए^@^पी $ संशोधन: 1.5 $ " –

+0

जैसा कि आपने निर्दिष्ट किया है, मुझे इस एनोटेशन में @Retention (RetentionPolicy.RUNTIME) जोड़ना चाहिए। –

+1

क्या एनोटेशन के लिए किसी भी अतिरिक्त झंडे के साथ किसी को 'जावप' चलाने की ज़रूरत है? जब मैं 'javap java.lang.String' चलाता हूं तो उन्हें नहीं देख रहा हूं। –

21

जैवप संस्करण 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

संबंधित मुद्दे