2010-11-15 6 views
8

मेरे पास एक बहु मॉड्यूल मैवेन प्रोजेक्ट है और मैं सभी प्रोडोड्यूल को निष्पादित करने के बाद एक ऑपरेशन (एंट्रून) चलाने में सक्षम होना चाहता हूं।मेवेन मल्टी-मॉड्यूल प्रोजेक्ट - सभी सबोडोड्यूल समाप्त होने के बाद ऑपरेशन कैसे चलाएं

मेरी परियोजनाओं में मैं प्रत्येक उप-मॉड्यूल से आरपीएम बनाता हूं और तैनाती चरण में मैं आरपीएम (एसएसएच द्वारा) को आरपीएम रिपोजिटरी में कॉपी करता हूं।
आरपीएम रेपो के लिए मुझे नए आरपीएम जोड़ने के बाद एक निर्मित कमांड चलाने की आवश्यकता है ताकि वह उन्हें अनुक्रमित कर सके।
तो मेरे पास एक एंट्रून है जो वास्तव में स्कैन चलाता है और RPM को रेपो में कॉपी करता है। यह प्रत्येक सबमिशन के लिए चलता है जो वास्तव में एक आरपीएम उत्पन्न करता है और पर चरण तैनात करता है। मैं क्या कर सकता हूं प्रत्येक scp buildrepo कमांड चलाने के बाद, लेकिन यह अपमानजनक होगा, मेरे पास 10 से अधिक सबोड्यूल्यूल हैं और प्रत्येक createrepo में लगभग एक मिनट लगते हैं इसलिए मैं कीमती निर्माण समय बर्बाद कर दूंगा।

मैं जो करना चाहता हूं वह सब सबोडोड्यूल समाप्त होने के बाद है, फिर createrepo चलाएं। एक बार।

मेरा पहला प्रयास एंट्रून को हुक करना था जो मूल पोम (सुपर-पोम) पर createrepo कमांड को चरण तैनात करता है। मैंने ऐसा किया और समस्या यह थी कि माता-पिता के तैनाती चरण से पहले submodules 'तैनाती चरण चलाता है। मैं चाहता था कि
के बाद मैं किसी अन्य बाद के चरण में createrepo antrun संलग्न नहीं कर सकता क्योंकि तैनाती चरण जीवन चक्र में आखिरी है।

तो मेरा सवाल यह है कि: "क्लीनअप" एंट्रून या सामान्य रूप से एक प्लगइन चलाने का कोई तरीका है जो सभी पनडुब्बियों के सभी निर्माण संचालन सफलतापूर्वक समाप्त होने के बाद एक बार निष्पादित हो जाएगा?

इसके चारों ओर एक हैक एक और सबमिशन तैयार करना होगा और सुनिश्चित करें कि यह अन्य सभी मॉड्यूल पर निर्भर करता है और इस मॉड्यूल के तैनाती चरण से createrepo चलाता है। लेकिन यह बदसूरत और बनाए रखने के लिए मुश्किल है। मैं एक क्लीनर समाधान पसंद करते हैं।

धन्यवाद

Maven संस्करण 2.2.1

+0

क्या आप एक अच्छे समाधान के साथ आए थे? –

उत्तर

3

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

इसे जगह में क्यों न रखें और देखें कि यह आपके लिए कितना अच्छा काम करता है? याद रखें कि कामकाजी कोड हर बार सुंदर लेकिन गैर-काम करने वाला कोड धड़कता है।

+0

मेरा संगीत कार्यक्रम रखरखाव है (जब नए मॉड्यूल जोड़े जाते हैं) और यह कितना स्पष्ट है कि वी/एस हैक। मैं इसके साथ जाऊंगा यदि कोई अन्य अंतर्निहित और स्पष्ट समाधान – Ran

+3

मैं सहमत हूं, विशेष रूप से इस कार्य के लिए नामित एक मॉड्यूल बहुत समझ में आता है। आप इसे एक अलग प्रोफ़ाइल में भी डाल सकते हैं ताकि यह केवल एक विशिष्ट परिनियोजन के लिए चलाया जा सके। –

0

मैं ऐसे समाधान का उपयोग कर रहा हूं जो प्रकाशन सामग्री से भवन और पैकेजिंग को अलग कर रहा है। चूंकि हम जेनकींस का उपयोग कर रहे हैं, हर बिल्ड प्रकाशित नौकरी का आह्वान करता है जो हैंडल की भी बनावट सामग्री बनाता है, और यहां तक ​​कि अच्छी चीज यह है कि जेनकिंस आपको इस प्रकाशन नौकरी को पैराल में भी चलाने देता है।

क्या मुश्किल था कि वास्तव में createrepo चरण के दौरान यदि वास्तव में एक ही पल में दो नौकरियां चलती हैं तो असफल होने जा रहा है, क्योंकि वे फ़ाइलों के उसी सेट पर एक ही फ़ोल्डर में समान ऑपरेशन नहीं कर सकते हैं। हालांकि, मैंने केवल createrepo चरण के लिए झुंड लागू किया है, और अब सभी नौकरियां वास्तव में पैराल में प्लसेल में तीन प्रकाशनों में चल रही हैं और साथ ही परीक्षण किए गए हैं, लेकिन हम कुछ अन्य निर्णयों के कारण दो का उपयोग कर रहे हैं।

हालांकि, इस दृष्टिकोण का उपयोग करते हुए, हमने बीस + बिल्डों के लिए कुल निर्माण समय 1.5h से 15 मिनट तक घटा दिया।

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