मेरी राय में, इस प्रश्न का उत्तर देने के लिए, आपको प्रोजेक्ट जीवन चक्र और संस्करण नियंत्रण के संदर्भ में सोचने की आवश्यकता है। दूसरे शब्दों में, क्या माता-पिता के पोम का अपना जीवन चक्र है यानी इसे अन्य मॉड्यूलों के अलग से जारी किया जा सकता है या नहीं?
यदि उत्तर हां है (और यह अधिकांश परियोजनाओं का मामला है जो प्रश्न में या टिप्पणियों में उल्लेख किया गया है), तो माता-पिता पोम को वीसीएस से और मावेन बिंदु से अपने स्वयं के मॉड्यूल की आवश्यकता होती है और आप समाप्त करेंगे VCS स्तर पर कुछ इस तरह से:
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
`-- projectA
|-- branches
|-- tags
`-- trunk
|-- module1
| `-- pom.xml
|-- moduleN
| `-- pom.xml
`-- pom.xml
यह चेकआउट को थोड़ा दर्दनाक बनाता है और इससे निपटने का एक सामान्य तरीका है svn:externals
। उदाहरण के लिए, एक trunks
निर्देशिका जोड़ें :
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
| |-- module1
| | `-- pom.xml
| |-- moduleN
| | `-- pom.xml
| `-- pom.xml
`-- trunks
निम्नलिखित बाह्य परिभाषा के साथ:
parent-pom http://host/svn/parent-pom/trunk
projectA http://host/svn/projectA/trunk
trunks
तब निम्न स्थानीय संरचना (पैटर्न # 2) में एक चेकआउट होगा:
root/
parent-pom/
pom.xml
projectA/
वैकल्पिक रूप से, आप निर्देशिका pom.xml
में भी जोड़ सकते हैं trunks
:
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
| |-- module1
| | `-- pom.xml
| |-- moduleN
| | `-- pom.xml
| `-- pom.xml
`-- trunks
`-- pom.xml
यह pom.xml
एक तरह का "नकली" पोम है: यह कभी रिलीज़ नहीं होता है, इसमें कोई वास्तविक संस्करण नहीं होता है क्योंकि यह फ़ाइल कभी रिलीज़ नहीं होती है, इसमें केवल मॉड्यूल की सूची होती है। इस फ़ाइल के साथ, इस संरचना में एक चेकआउट होगा (पैटर्न # 3):
root/
parent-pom/
pom.xml
projectA/
pom.xml
यह "हैक" एक चेकआउट के बाद रूट से एक रिएक्टर बिल्ड लॉन्च करने और चीजों को और भी आसान बनाने की अनुमति देता है। वास्तव में, यह है कि मुझे मावेन परियोजनाओं को स्थापित करना पसंद है और बड़े बिल्डरों के लिए वीसीएस रिपॉजिटरी : यह सिर्फ काम करता है, यह अच्छी तरह से तराजू है, यह आपको आवश्यक सभी लचीलेपन देता है।
यदि उत्तर नहीं है (प्रारंभिक प्रश्न पर वापस), तो मुझे लगता है कि आप पैटर्न # 1 के साथ रह सकते हैं (सबसे सरल काम करें जो संभवतः काम कर सकते हैं)।
अब, बोनस प्रश्नों के बारे में:
- विभिन्न साझा कॉन्फ़िगरेशन को स्रोत नियंत्रण, परिनियोजन निर्देशिका, सामान्य प्लग इन इत्यादि के रूप में परिभाषित करने के लिए सबसे अच्छी जगह कहां है (मैं अभिभावक मान रहा हूं लेकिन मुझे अक्सर इससे काट लिया गया है और वे इसके बजाय प्रत्येक प्रोजेक्ट में समाप्त हो गए हैं एक आम)।
ईमानदारी से, मैं नहीं जानता कि यहां एक सामान्य उत्तर कैसे नहीं दिया जाए (जैसे "उस स्तर का उपयोग करें जिस पर आपको लगता है कि यह चीजों को पारस्परिक बनाने के लिए समझ में आता है")। और वैसे भी, चाइल्ड पॉम हमेशा विरासत में मिली सेटिंग्स को ओवरराइड कर सकते हैं।
- मावेन-रिलीज़ प्लगइन, हडसन और नेक्सस कैसे आपके मल्टी-प्रोजेक्ट्स को सेट करते हैं (संभवतः एक विशाल सवाल है, यह अधिक है अगर किसी को पकड़ा गया है जब मल्टी-प्रोजेक्ट बिल्ड कैसे सेट किया गया है)?
मैं जिस सेटअप का उपयोग करता हूं वह अच्छी तरह से काम करता है, विशेष रूप से उल्लेख करने के लिए कुछ भी नहीं है।
वास्तव में, मुझे आश्चर्य है कि मावेन-रिलीज़-प्लगइन कैसे पैटर्न # 1 के साथ काम करता है (विशेषकर तब <parent>
अनुभाग के साथ जब से आप रिलीज़ समय में स्नैपशॉट निर्भरता नहीं कर सकते हैं)। यह एक चिकन या अंडे की समस्या की तरह लगता है, लेकिन मुझे याद नहीं है कि यह काम करता है और यह परीक्षण करने के लिए बहुत आलसी था।