2013-03-23 20 views
22

के साथ एनोटेशन प्रोसेसर को एकीकृत करना मुझे कुछ एनोटेशन प्रोसेसर लिखने की आवश्यकता है। मुझे this blog post मिला जो बताता है कि यह एक सामान्य सेटिंग और ग्रहण के साथ कैसे किया जा सकता है।ग्रैडल

हालांकि मैं इंटेलिजे आईडीईए और ग्रैडल का उपयोग कर रहा हूं, और अगर ऐसा करने के लिए बेहतर (जैसे, कम कठिन) दृष्टिकोण था तो इसे पसंद करें। क्या मैं देख रहा हूँ:

  1. मैं दोनों एनोटेशन प्रोसेसर और कोड है कि उन्हें एक ही परियोजना में लेने वाली हो जाएगा और Gradle वर्ग पथ के लिए प्रोसेसर जोड़ने संभाल चाहिए और approrpiate पर javac के साथ उन्हें लागू लिखने के लिए सक्षम होना चाहिए मंच।
    या
  2. यदि उपर्युक्त संभव नहीं है और मुझे दो अलग-अलग परियोजनाएं बनाना है, तो कम से कम उन्हें एक ही गिट भंडार में रखना संभव होना चाहिए। ग्रैडल को निर्बाध रूप से निर्माण को संभालना चाहिए।
    या
  3. यदि न तो संभव है और मुझे दो अलग गिट भंडार बनाना है, तो कम से कम, ग्रैडल को बिना किसी मैन्युअल हस्तक्षेप के लिंक किए गए ब्लॉग पोस्ट में उल्लिखित चीजों को संभालना चाहिए।

मेरा गिट और ग्रैडल कौशल शुरुआती स्तर है। मैं इस कार्य के साथ किसी भी मदद की सराहना करता हूं। धन्यवाद।

+1

विकल्प 1 के समाधान के लिए खोज रहे हैं। – Avik

उत्तर

6

हां, अलग मॉड्यूल में प्रोसेसर को स्थानांतरित करना और इसे अन्य मॉड्यूल से उपयोग करना संभव है (नीचे querydslapt देखें)।

मैं अपनी खुद की AbstractProcessor

को लागू करने और इस तरह इसका इस्तेमाल करने के लिए आप की सिफारिश करेंगे:

dependencies { 
    .... 
    // put dependency to your module with processor inside 
    querydslapt "com.mysema.querydsl:querydsl-apt:$querydslVersion" 
} 

task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') { 
    source = sourceSets.main.java // input source set 
    classpath = configurations.compile + configurations.querydslapt // add processor module to classpath 
    // specify javac arguments 
    options.compilerArgs = [ 
      "-proc:only", 
      "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor" // your processor here 
    ] 
    // specify output of generated code 
    destinationDir = sourceSets.generated.java.srcDirs.iterator().next() 
} 

पूर्ण उदाहरण here

9

एक अन्य समाधान (मेरी राय क्लीनर में) प्राप्त कर सकते हैं कर सकते थे दो subprojects होना चाहिए और उसके बाद केवल उस व्यक्ति को बनाएं जिसमें एनोटेशन प्रोसेसर मुख्य की निर्भरता हो। तो अपने उप के साथ दो निर्देशिकाओं दिया: अपनी परियोजना के रूट में core और annotation-processors, आप भी साथ एक settings.gradle फ़ाइल है की आवश्यकता होगी निम्नलिखित:

include 'core' 
include 'annotation-processors' 

और फिर मूल परियोजना के लिए Gradle फ़ाइल में:

dependencies { 
    compile project(':annotation-processors') 
} 

ऐसा करना चाहिए और आपको कस्टम संकलन कार्यों और उनके क्लासपाथ से निपटने की आवश्यकता नहीं होगी।

+0

हाँ, आप सही हैं। मेरे उदाहरण में "querydsl-apt" को कुछ सबप्रोजेक्ट –

+3

'एनोटेशन-प्रोसेसर' द्वारा प्रतिस्थापित किया जाना चाहिए फ़ाइल स्रोत/मुख्य/संसाधन/मेटा-आईएनएफ/सेवाएं/javax.annotation.processing.Processor जिसमें आपके प्रोसेसर का संदर्भ है। – FeelGood

+0

यह केवल तब तक काम करता है जब तक कि 'कोर' और 'एनोटेशन-प्रोसेसर' लाइब्रेरी का हिस्सा नहीं हैं, क्योंकि ग्रेडल अभी भी रिकर्सिव का समर्थन नहीं करता है (केवल एक 'सेटिंग्स .gradle' का उपयोग किया जा सकता है)। –