6

हमारे एंटरप्राइज़ एप्लिकेशन में हम अपने जावा कक्षाओं से डेटा एकत्र करने के लिए एक गतिशील तरीका खोज रहे हैं। हमने name संपत्ति के साथ एक कस्टम एनोटेशन इंटरफ़ेस (@interface) बनाया है। हम सभी एनोटेटेड कक्षाओं से इस संपत्ति का मूल्य एकत्र करना चाहते हैं।मैवेन 2 के साथ कस्टम एनोटेशन प्रोसेसर का उपयोग कैसे करें?

मैं कस्टम एनोटेशन के लिए AnnotationProcessorFactory और AnnotationProcessor बनाने में कामयाब रहा। चूंकि हम मेवेन 2 का उपयोग कर रहे हैं, इसलिए मैंने मुख्य परियोजना के pom.xml में प्लगइन में निम्नलिखित जोड़ा।

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>apt-maven-plugin</artifactId> 
     <version>1.0-alpha-5</version> 
     <configuration> 
     <factory>our.company.api.component.lister.ComponentAnnotationProcessFactory</factory> 
     </configuration> 
    </plugin> 

यह मुख्य परियोजना में रहता है जिसमें कई उप-परियोजनाएं हैं। फैक्ट्री और कस्टम प्रोसेसर इन उप-परियोजनाओं में से एक में हैं। कस्टम एनोटेशन सभी उप-परियोजनाओं के माध्यम से बिखरे हुए हैं इसलिए मैंने मुख्य परियोजना के pom.xml में प्लगइन डाला है।

समस्या तब होती है जब मैं mvn apt:process आदेश जारी करता हूं मुझे प्रोसेसर के बिना एनोटेशन के बारे में चेतावनी मिली और हमारे कस्टम एनोटेशन उनमें से हैं। मुझे लगता है कि इसका मतलब है कि प्लगइन कारखाने वर्ग नहीं मिल सकता है।

मुझे क्या करना चाहिए ताकि प्लगइन कारखाने और प्रोसेसर फ़ाइल को ढूंढ सके?

संपादित करें:

परियोजना पदानुक्रम बहुत सरल है:

main_project 
|-sub_project1 
|... 
|-sub_projectn 

प्लगइन main_project की pom.xml में है। बस लगता है कि कारखाने और प्रोसेसर sub_project1 में हैं और कस्टम एनोटेशन sub_project2 में, sub_project3, ..., sub_projectn

+0

क्या अपनी परियोजना पदानुक्रम कैसा दिखता है में Annotation Processing Tool? – Daniel

उत्तर

6

दो बातों की जांच कर रहे हैं:

  1. सुनिश्चित करें कि main_project (या प्लग-इन) depends on the project जिसमें आपके ComponentAnnotationProcessFactory शामिल हैं।
  2. अपार्टमेंट Maven प्लगइन का <factory> विन्यास टैग मेरे लिए काम नहीं किया था, लेकिन अगर इसकी पूरी तरह से योग्य नाम META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory फ़ाइल में है प्लगइन कारखाने वर्ग पाता है। (documentation of apt for the details देखें।)

एक बेहतर दृष्टिकोण annotation processing features of JDK 6 (Maven अपार्टमेंट प्लगइन के बजाय) उपयोग कर रहा है के बाद से यह com.sun पैकेज और tools.jar JDK के lib फ़ोल्डर से आवश्यकता नहीं है।

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 

      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 

       <annotationProcessors> 
        <annotationProcessor> 
         com.example.annotationprocessor.Processor 
        </annotationProcessor> 
       </annotationProcessors> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

आगे संदर्भ:

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