2012-10-12 27 views
8

सवाल स्पष्ट प्रतीत होता है, लेकिन कार्यान्वयन मेरे लिए बहुत कठिन है।चींटी के साथ एनोटेशन प्रोसेसर कैसे संकलित करें?

मेरा लक्ष्य चींटी निर्माण स्क्रिप्टमें लिखने के लिए कुछ वर्गों है कि आवश्यकता होती है एक और कक्षाओं एनोटेशन प्रोसेसर द्वारा उत्पन्न संकलन है। मेरे पास एक कस्टम एनोटेशन है और यह प्रोसेसर कार्यान्वयन है (AbstractProcessor कक्षा से विरासत में मिला)।

  1. कुछ टिप्पणी किए गए वर्गों के ऊपर एनोटेशन प्रोसेसर
  2. भागो संकलक संकलित नए लोगों को उत्पन्न करने के लिए:

    मैं समझता हूँ जैसा कि मैंने की जरूरत है।

  3. कि उत्पन्न वर्गों
कोड (चरण 1 & 2)

की आवश्यकता होती है वर्गों संकलित करें:


<target name="compileAnnotationProcessor">   
    <javac destdir="${OUTPUT_DIR}" 
      debug="true" 
      failonerror="true" 
      includeantruntime="false" 
      classpath="${java.class.path}"> 
     <src> 
      <pathelement path="${PROJECT_DIR}/tools/src"/> 
     </src> 

     <include name="/path/to/annotation/processor/package/**"/> 
    </javac> 
</target> 

<target name="generateFilesWithAPT" depends="compileAnnotationProcessor"> 
    <javac destdir="${OUTPUT_DIR}" 
      includeantruntime="false" 
      listfiles="false" 
      fork="true" 
      debug="true" 
      verbose="true"> 
     <src> 
      <pathelement path="${PROJECT_DIR}/common/src/"/> 
     </src> 
     <include name="/path/to/files/to/compile/**"/> 
     <classpath> 
      <pathelement path="${OUTPUT_DIR}"/> 
      <pathelement path="${java.class.path}"/> 
     </classpath> 

     <compilerarg line="-proc:only"/> 
     <compilerarg line="-processorpath ${OUTPUT_DIR}/path/to/annotation/processor/package/annProcessorImplement"/> 
    </javac> 
</target> 

वास्तव में, पहला काम अच्छा प्रदर्शन कर रहा है और संकलित करता है। एनोटेशन प्रोसेसर कार्यान्वयन के लिए कक्षा फ़ाइल। यह दूसरे कार्य पर रोक रहा है।

चींटी कहते हैं: Annotation processing without compilation requested but no processors were found.

क्या मैं गलत कर रहा हूँ? शायद मुझे एनोटेशन प्रोसेसर क्लास को .jar में रखना चाहिए? या -processorpath तर्क के रूप में .class एक्सटेंशन के साथ फ़ाइल नाम प्रदान करें? मैं कई विकल्प की कोशिश की लेकिन कुछ भी नहीं है में मदद करता है ..


नोट्स:

मैं उपयोग कर रहा हूँ apt क्योंकि documentation दावा है कि उपयुक्त उपकरण के साथ-साथ com.sun.mirror एपीआई अब मान्य नहीं है के बजाय चींटी javac कार्य। मैंने इस question को भी देखा है, लेकिन प्रोसेसर को सही तरीके से संकलित करने के बारे में कोई जानकारी नहीं है।

मैं उपयोग कर रहा हूँ:

  • जावा 1.6
  • चींटी 1.8.2

उत्तर

4

मेरे सामान्य दृष्टिकोण है:

  • में एनोटेशन प्रोसेसर के साथ एक साथ एनोटेशन पैक इसका अपना जार
  • मेरे माध्यम से एनोटेशन प्रोसेसर पंजीकृत करें टीए-आईएनएफ/सेवाओं में उस जार

फिर भी जहां भी आपकी टिप्पणियों पर निर्भरता हो, एनोटेशन प्रोसेसर स्वचालित रूप से बिना किसी अतिरिक्त कॉन्फ़िगरेशन के उठाया जाएगा।

+0

क्या एनोटेशन प्रोसेसर (प्लस एनोटेशन) को रखे बिना ऐसा करना संभव है।जार? – ivstas

+0

कम से कम एनोटेशन प्रोसेसर आमतौर पर कक्षाओं की तुलना में एक अलग जार में होना चाहिए, जो आपकी एनोटेशन के साथ एनोटेटेड हैं, क्योंकि एनोटेशन प्रोसेसर को संकलित करते समय एनोटेशन प्रोसेसिंग को अक्षम किया जाना चाहिए। आपके पास एनोटेशन और एनोटेशन प्रोसेसर दो अलग-अलग जारों में हो सकते हैं, लेकिन फिर आपको एनोटेशन को संसाधित करने के लिए दोनों पर निर्भरता घोषित करनी होगी, जो मुझे लगता है कि ज्यादातर मामलों में कम आरामदायक है। – Puce

+0

स्पष्ट होने के लिए, मेरा मतलब यह नहीं है कि जार में केवल एनोटेशन और एनोटेशन प्रोसेसर होना चाहिए, लेकिन इसमें कोई भी कक्षा नहीं होनी चाहिए जिसे एनोटेशन प्रोसेसर द्वारा संसाधित करने की आवश्यकता हो। – Puce