2010-05-12 9 views
5

शैक्षिक उद्देश्यों के लिए मैं (सूट करने के लिए बेहतर ग्रहण क्रम में फ्लैट) तो जैसे एक परियोजना लेआउट की स्थापना की है:मैवेन - समेकन के लिए 'सब' या 'पैरेंट' परियोजना?

-product 
| 
|-parent 
|-core 
|-opt 
|-all 

जनक, कोर के साथ एक समग्र परियोजना में शामिल है चुनते हैं और सभी। कोर आवेदन के अनिवार्य हिस्से को लागू करता है। ऑप्ट एक वैकल्पिक हिस्सा है। सभी को कोर के साथ कोर को गठबंधन करना है, और इन दो मॉड्यूल निर्भरताओं के रूप में सूचीबद्ध हैं।

अब मैं निम्नलिखित कलाकृतियों बनाने के लिए कोशिश कर रहा हूँ:

  1. उत्पाद-core.jar
  2. उत्पाद कोर-src.jar
  3. उत्पाद कोर-साथ-dependencies.jar
  4. उत्पाद-opt.jar
  5. उत्पाद-ऑप्ट src.jar
  6. उत्पाद-ऑप्ट के साथ-dependencies.jar
  7. उत्पाद-all.jar
  8. उत्पाद सभी-src.jar
  9. उत्पाद सभी-साथ-dependencies.jar

उनमें से अधिकांश काफी उत्पादन करने के लिए सरल कर रहे हैं। हालांकि मुझे समेकित कलाकृतियों के साथ कुछ समस्या है। मैंने उत्पाद-ऑल-एसआरसीजर को 'ऑल' मॉड्यूल में एक कस्टम असेंबली डिस्क्रिप्टर के साथ बनाने में कामयाब रहा है जो सभी गैर-संक्रमणीय deps के स्रोतों को डाउनलोड करता है, और यह ठीक काम करता है। यह तकनीक मुझे उत्पाद-ऑल-ऑन-निर्भरताएं भी बनाती है .jar।

हालांकि मुझे हाल ही में पता चला है कि आप स्रोत का उपयोग कर सकते हैं: संपूर्ण समग्र परियोजना के कुल स्रोतों के लिए स्रोत प्लगइन में कुल लक्ष्य। यह जावाडोक प्लगइन के लिए भी सच है, जो मूल परियोजना के उपयोग के माध्यम से भी एकत्रित होता है।

तो मैं अपने 'सभी' मॉड्यूल दृष्टिकोण और 'सभी' मॉड्यूल को मिटाने और सभी समेकन के लिए 'पैरेंट' मॉड्यूल का उपयोग करने के बीच फाड़ा हूं। यह 'माता-पिता' में उत्पादित कुछ समग्र कलाकृतियों के लिए अशुद्ध लगता है, और अन्य 'सभी' में उत्पादित होते हैं। क्या मूल परियोजना में 'उत्पाद-सब' जार बनाने या 'सभी' परियोजना में कुल जावडोक बनाने का कोई तरीका है? या मुझे बस दोनों रखना चाहिए?

धन्यवाद

उत्तर

5

सपाट पेड़ अक्सर उपयोग नहीं किए जाते हैं। ग्रहण परियोजनाओं और अच्छे मैवेन और ग्रहण एकीकरण की कमी के साथ सौदा करने के लिए यह कई साल पहले किया गया था। यदि आप ग्रहण परियोजनाओं को ग्रहण परियोजनाओं में आयात करने के लिए m2eclipse का उपयोग करते हैं, तो आपको मेवेन-ठेठ घोंसले वाले पेड़ के साथ कोई समस्या नहीं होगी।

जहां तक ​​मेवेन निर्माण की संरचना का एक अच्छा उदाहरण है? मेवेन प्रोजेक्ट स्रोत itself। इसमें आपके सभी टुकड़े हैं, जिनमें अंतिम assembly शामिल हैं जो बंडलों को संकुलित करते हैं।

ठेठ नेस्टेड संरचना में शीर्ष डाउन पदानुक्रम है जहां माता-पिता इसके नीचे मॉड्यूल का एकत्रीकरण कर रहे हैं, और बच्चे माता-पिता से मूल्य विरासत में हैं। हालांकि ये और कभी-कभी अलग हो सकते हैं, यह आदर्श नहीं है।

+0

टिप के लिए धन्यवाद। मैंने बस इसे देखा और ऐसा लगता है कि मैवेन स्रोत सामान्य लेआउट का पालन करता है जो मैंने सुझाया था, हालांकि पेड़ को फटकारने के बिना आपने बताया। अंतिम असेंबली आईएमओ बहुत साफ नहीं है, यह सिर्फ '../' निर्देशिका में सभी स्रोत फ़ाइलों के लिए एक regex grep करता है, यदि आप 3: तृतीय पक्ष निर्भरताओं आदि से स्रोत चाहते हैं तो आसान नहीं है। यह भी नहीं है कि कैसे जावाडोक एग्रीगेटर काम (मूल परियोजना के माध्यम से)। ऐसा लगता है कि मैं जिस कार्यक्षमता को याद कर रहा हूं, वह गायब है, जब मैंने कुछ प्रयोग किया है तो मैं यहां एक वैकल्पिक दृष्टिकोण लिखने की कोशिश करूंगा। सूचक के लिए धन्यवाद। –

+0

बीटीडब्ल्यू, src assembly http://svn.apache.org/repos/asf/maven/maven-3/trunk/apache-maven/src/main/assembly/src.xml पर पाया जा सकता है –

0

मैं बस से विधानसभा वर्णनकर्ता रखने सुझाव देंगे "सभी", यह माता पिता को स्थानांतरित/और उसके अनुसार बदल माता-पिता/pom.xml, और फिर mvn -f parent/pom.xml assembly:assembly की तरह कुछ कर रही द्वारा कि विधानसभा पैदा करते हैं। दूसरे शब्दों में, हाँ, "सभी" के लिए अनावश्यक प्रोजेक्ट को हटा दें क्योंकि यह केवल "पैरेंट" पहले से ही डुप्लिकेट कर रहा है।

एक तरफ ध्यान दें, "पैरेंट" उस परियोजना के लिए खराब नामकरण पसंद की तरह लगता है यदि यह एक समग्र परियोजना है और न केवल माता-पिता pom.xml है।

[संपादित करें]

हालांकि एक बहुत बड़ा परियोजना, शायद एक परियोजना है कि खर्च की गई थी आप कैसे envisioning कर रहे हैं अपाचे ऊंट परियोजना है। इसे यहां देखें: http://camel.apache.org/source.html। एक अभिभावक/मॉड्यूल है जो सभी चीजों के लिए सभी को संभालता है, और अपाचे-ऊंट/(अपाचे-ऊंट/src // main/descriptors में असेंबली डिस्क्रिप्टर के साथ) में वास्तविक निर्माण वितरण के उत्पादन के लिए एक अलग मॉड्यूल। शायद यह एक और मदद होगी।

+0

क्या आप सुझाव दे रहे हैं कि मेरे पास एक माता-पिता होना चाहिए, केवल माता-पिता के साथ, और एक 'कुल', जो पूर्ण उत्पाद बनाता है? क्या आपको माता-पिता में या कुल मिलाकर 'निर्भरता प्रबंधन' रखना चाहिए? क्या आप एक अच्छा उदाहरण परियोजना सुझा सकते हैं? –

+0

अनिवार्य रूप से हां। यदि आपका "कुल" एक असेंबली डिस्क्रिप्टर को कॉल करने से कुछ भी नहीं कर रहा है, हालांकि इसे अलग मॉड्यूल में रखने की आवश्यकता नहीं है। यह केवल शीर्ष स्तर के पोम के साथ रह सकता है (शायद माता-पिता के साथ नहीं, जैसा कि मैंने पहले सुझाव दिया था)। <निर्भरता प्रबंधन> और <प्लगइन प्रबंधन> पैरेंट पोम के साथ रहना चाहिए। यदि आपके पास बहुत जटिल जटिलता है (कहें ... विंडोज, लिनक्स और ओएसएक्स के लिए एक व्यक्तिगत निर्माण) तो उन योगों को अलग-अलग मॉड्यूल में होना चाहिए। आपके मामले में ऐसा लगता है कि बस एक साधारण असेंबली करेगा। – whaley

+0

इसे खींचने के लिए खेद है, लेकिन आप एक समग्र परियोजना के लिए एक पूर्ण जार कैसे बनाते हैं? मैं यह नहीं समझ सकता कि 'सब' परियोजना के बिना इसे कैसे किया जाए। –

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