सवाल स्पष्ट प्रतीत होता है, लेकिन कार्यान्वयन मेरे लिए बहुत कठिन है।चींटी के साथ एनोटेशन प्रोसेसर कैसे संकलित करें?
मेरा लक्ष्य चींटी निर्माण स्क्रिप्टमें लिखने के लिए कुछ वर्गों है कि आवश्यकता होती है एक और कक्षाओं एनोटेशन प्रोसेसर द्वारा उत्पन्न संकलन है। मेरे पास एक कस्टम एनोटेशन है और यह प्रोसेसर कार्यान्वयन है (AbstractProcessor
कक्षा से विरासत में मिला)।
- कुछ टिप्पणी किए गए वर्गों के ऊपर एनोटेशन प्रोसेसर
- भागो संकलक संकलित नए लोगों को उत्पन्न करने के लिए:
मैं समझता हूँ जैसा कि मैंने की जरूरत है।
- कि उत्पन्न वर्गों
की आवश्यकता होती है वर्गों संकलित करें:
<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
क्या एनोटेशन प्रोसेसर (प्लस एनोटेशन) को रखे बिना ऐसा करना संभव है।जार? – ivstas
कम से कम एनोटेशन प्रोसेसर आमतौर पर कक्षाओं की तुलना में एक अलग जार में होना चाहिए, जो आपकी एनोटेशन के साथ एनोटेटेड हैं, क्योंकि एनोटेशन प्रोसेसर को संकलित करते समय एनोटेशन प्रोसेसिंग को अक्षम किया जाना चाहिए। आपके पास एनोटेशन और एनोटेशन प्रोसेसर दो अलग-अलग जारों में हो सकते हैं, लेकिन फिर आपको एनोटेशन को संसाधित करने के लिए दोनों पर निर्भरता घोषित करनी होगी, जो मुझे लगता है कि ज्यादातर मामलों में कम आरामदायक है। – Puce
स्पष्ट होने के लिए, मेरा मतलब यह नहीं है कि जार में केवल एनोटेशन और एनोटेशन प्रोसेसर होना चाहिए, लेकिन इसमें कोई भी कक्षा नहीं होनी चाहिए जिसे एनोटेशन प्रोसेसर द्वारा संसाधित करने की आवश्यकता हो। – Puce