2011-08-06 4 views
12

क्या किसी के पास संकलन समय पर एक मेवेन प्रोजेक्ट प्रीप्रोसेसिंग क्लास एनोटेशन का एक साफ उदाहरण है, जिसके बाद उसी पीढ़ी के वर्गों को संकलन प्रक्रिया में संकलित किया जा सकता है?समान संकलन प्रक्रिया में एनोटेशन प्रीप्रोकैसिंग और कक्षाओं की पीढ़ी का मेवेन उदाहरण?

क्या किसी के पास ऐसी परियोजना को लागू करने के लिए चरण-दर-चरण प्रक्रिया है?

उत्तर

20

हो सकता है नेट पर मौजूदा दस्तावेज में एक बहुत नेविगेट करने के बाद, मैं के साथ आया था निम्नलिखित:

क्या जरूरत है स्पष्ट किया जाना चाहिए:

  • आदेश में करने के लिए किसी दिए गए प्रोजेक्ट पी पर एनोटेशन की प्रक्रिया करें, आपको पहले एक अलग लाइब्रेरी में संकलित एनोटेशन प्रोसेसर की आवश्यकता है। पी को एस
  • पर निर्भरता होनी चाहिए जावा 5 में एनोटेशन प्रोसेसिंग लागू करना बिल्कुल ज जैसा नहीं है va 6.
  • जावा 5 एपीटी के एक अलग निष्पादन पर निर्भर करता है। इसी ट्यूटोरियल here और here जावा में एनोटेशन प्रोसेसिंग और कार्यान्वयन की मूल बातें समझने में मदद करते हैं 5. नए लोगों के लिए अच्छी पढ़ाई।
  • मैवेन के साथ जावा 5 में एनोटेशन प्रोसेसिंग लागू करना मुश्किल है। इन ट्यूटोरियल में वर्णित एपीआई तक पहुंचने के लिए किसी को स्थानीय निर्भरता tools.jar पर जोड़ने की आवश्यकता है। साफ नहीं। एपीटी को कॉल करने वाले कुछ तीसरे पक्ष के प्लगइन्स उपलब्ध हैं, लेकिन अच्छी तरह से प्रलेखित नहीं हैं।
  • जावा 6 का उपयोग करने वाले लोग उपरोक्त ट्यूटोरियल के अनुसार अपने प्रोसेसर को लागू करने के लिए कूद-शुरू करना चाहिए। Maven

    • एक नया package साथ जावा 6 में

    एनोटेशन प्रसंस्करण एनोटेशन कार्रवाई करने के लिए जावा 6 में दिया गया है: Pluggable Annotation Processing

  • प्रोसेसर को लागू करने के लिए, एक अलग मेवेन प्रोजेक्ट बनाएं। उपर्युक्त ट्यूटोरियल या this कोई बताता है कि कैसे आगे बढ़ना है। यह हमारे पुस्तकालय एस
  • तो है, अपनी परियोजना पी बना सकते हैं और एस
  • पर एक Maven निर्भरता जोड़ने वर्तमान में maven-compiler-plugin के साथ एक issue नहीं है, लेकिन एक समाधान उपलब्ध here है। मौजूदा एनोटेटेड कोड के हिस्से के रूप में अपने जेनरेट कोड को संकलित करने के लिए इसका इस्तेमाल करें।

... और कोड पीढ़ी

  • एक महान जावा कोड पीढ़ी CodeModel बुलाया पुस्तकालय केंद्रीय Maven से उपलब्ध है। एक अच्छा ट्यूटोरियल here उपलब्ध है। जावैक्स एनोटेशन प्रोसेसिंग पैकेज आउटपुट उत्पन्न करने के लिए कुछ टूल्स भी प्रदान करता है।
+2

इस उत्तर में बहुत अच्छी चीजें हैं। लेकिन एक बात सच नहीं है: आप इसे एक मेवेन पास में कर सकते हैं। यहां एक उदाहरण दिया गया है जिसमें जेसीओडी मॉडेल का उपयोग करके एक एनोटेशन प्रोसेसर भी शामिल है: https://github.com/jjYBdx4IL/example-maven-project-setups/tree/master/compile-time-annotation-processing – user1050755

+0

@ user1050755 एक महान सुझाव के लिए धन्यवाद । एक सवाल: आपने जेसीओडी मॉडल का उपयोग क्यों किया और आधिकारिक नहीं? https://github.com/javaee/jaxb-codemodel –

+0

क्योंकि jcodemodel वास्तव में बग को हल करता है। – user1050755

0

मेवेन-एंटर-प्लगइन वास्तव में ऐसा करता है। यह जावा कक्षाओं को व्याकरण से उत्पन्न करता है और संकलित प्लगइन जेनरेट कक्षाओं को संकलित करता है। मई यह उपयोगी maven-annotation-plugin

+1

धन्यवाद, लेकिन ईमानदारी से मुझे लगता है कि Maven-antlr-प्लगइन overkill है। इसके अलावा, साइट एक पूर्ण उदाहरण प्रदान नहीं करती है जो बताती है कि मेरे द्वारा उठाए गए मुद्दे को कैसे हल किया जाए। मैं एनोटेशन प्रोसेसर के साथ कुछ और सोच रहा हूं। मेवेन-एनोटेशन-प्लगइन दिलचस्प लग रहा है, लेकिन यह अपूर्ण दस्तावेज के साथ काम प्रगति पर है। अनुपयोगी। – JVerstry

+0

मुझे नहीं लगता कि वह ** एंटरलर प्लगइन का उपयोग कर ** वकालत कर रहा था, लेकिन यह देखने के लिए अपने स्रोत को देख रहा था कि यह कैसा करता है। –

3

Maven प्रोसेसर-प्लगइन है कि कर सकते हैं ... दस्तावेज़ से

https://code.google.com/p/maven-annotation-plugin/

उदाहरण:

<build> <plugins> 
    <!-- Run annotation processors on src/main/java sources --> 
    <plugin> 
    <groupId>org.bsc.maven</groupId> 
    <artifactId>maven-processor-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>process</id> 
     <goals> 
      <goal>process</goal> 
     </goals> 
     <phase>generate-sources</phase> 
     </execution> 
    </executions> 
    </plugin> 
    <!-- Disable annotation processors during normal compilation --> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <compilerArgument>-proc:none</compilerArgument> 
    </configuration> 
    </plugin> 
</plugins> </build> 
संबंधित मुद्दे