मैं वर्तमान में एक बहु-मॉड्यूल मैवेन प्रोजेक्ट के मेवेन बिल्ड को अनुकूलित करने पर काम कर रहा हूं। परियोजना में लगभग 9 0 मेवेन मॉड्यूल शामिल हैं। आम तौर पर कुछ क्रॉस-कटिंग libs कोर बनाते हैं और फिर पूरे एप्लिकेशन को बनाने के लिए लगभग 15 "एप्लिकेशन मॉड्यूल" होते हैं (जिसे बाद में एक डब्ल्यूएआर में तैनात किया जाता है)एक बहु-मॉड्यूल मेवेन बनाना स्वतंत्र रूप से अलग-अलग मॉड्यूल का निर्माण और रिलीज़ करना?
अब सामान्य रूप से पूरी परियोजना में एक प्रमुख संस्करण "2.5" तो जब एक नई बड़ी रिलीज की जाती है तो सभी "एप्लिकेशन मॉड्यूल" में एक ही संस्करण "2.5.0" होता है। अब तक सब ठीक है।
यदि किसी मॉड्यूल में एक बग है जिसे ठीक करने या सुधारने की आवश्यकता है, तो उस "एप्लिकेशन मॉड्यूल" का एक नया संस्करण जारी किया जाना चाहिए। तो उदाहरण के लिए मॉड्यूल ए को एक बग फिक्स्ड मिला, फिर एजर संस्करण "2.5.1" में होना चाहिए जबकि शेष अभी भी "2.5.0" होना चाहिए।
माता पिता (2.5.0-SNAPSHOT - मॉड्यूल एक (2.5.1-स्नैपशॉट) - मॉड्यूल बी (2.5.0-स्नैपशॉट) - मॉड्यूल सी (2.5.2-स्नैपशॉट) - युद्ध (2.5। 3-स्नैपशॉट) < - अंत में 3, क्योंकि सी में 2 पुन: रिलीज़ और एक था और सादगी के लिए प्रत्येक मॉड्यूल रिलीज के बाद रिलीज़ किया गया था।
हम मास्टर पोम में आर्टिफैक्ट संस्करणों के प्रबंधन के लिए बस गए हैं इसलिए हम नहीं करते हैं एक मॉड्यूल जारी करने के बाद प्रत्येक आर्टेफैक्ट के निर्भरता संस्करणों को अद्यतन करने की आवश्यकता नहीं है।
तो अब जब भी एक अद्यतन "एप्लिकेशन मॉड्यूल" तैयार होता है, तो हम मेवेन का उपयोग करते हैं उस मॉड्यूल की रिलीज करने के लिए रिलीज प्लगइन (हम एक मॉड्यूल जारी कर रहे हैं, पूरी परियोजना नहीं)। तो मान लें कि हम संस्करण 2.5.4 में मॉड्यूल ए जारी कर रहे हैं जिसके परिणामस्वरूप एजर को संस्करण 2.5.4 के रूप में तैनात किया जा रहा है और मॉड्यूल कोड को 2.5.5-एसएनएपीएसएचओटी में अपडेट करके परिष्करण किया जा रहा है।
ऐसा करने के बाद हमें मास्टर पोम में संस्करण को अपडेट करने की आवश्यकता है, इसलिए सभी मॉड्यूल सही संस्करण का संदर्भ जारी रखते हैं। जैसे ही सभी मॉड्यूल जारी कर रहे हैं,:
मास्टर पोम की dependencyManagement अनुभाग के लिए धन्यवाद, अगर मैं युद्ध मॉड्यूल का निर्माण, यह स्वचालित रूप से मॉड्यूल ए
अब मुश्किल हिस्सा आता है के नए संस्करण उठाता वेब एप्लिकेशन का एक नया संस्करण जारी किया जाना चाहिए। इसमें सभी अपरिवर्तित मॉड्यूल के साथ-साथ जो अभी रिलीज़ किए गए थे, उनमें होना चाहिए। मैं वर्तमान में यह कैसे करना है इस पर संघर्ष कर रहा हूं। अगर मैं अभिभावक पोम्स संस्करण पर निर्भर करता हूं, तो रिलीज में स्नैपशॉट संस्करण (सभी एक संस्करण वृद्धि बहुत अधिक) होगी, जो मैं और रिलीज प्लगइन की अनुमति नहीं देता है।
इस दुविधा के लिए सबसे अच्छा समाधान क्या होगा?
मुझे निर्भरता प्रबंधन को एक अलग पोम में आउटसोर्स करने का एक विचार था, जिसे "आयात" दायरे का उपयोग करके मास्टर पोम्स निर्भरता प्रबंधन में आयात किया जाता है।
इस प्रकार का szenario एक बेवकूफ विचार है? क्या इस तरह के बड़े बहु-मॉड्यूल अनुप्रयोग को विकसित और बनाए रखने के विकल्प हैं? पूरी परियोजना पर रिलीज प्लगइन का उपयोग कर सिंक ans में सभी संस्करणों को बस एक विकल्प नहीं है क्योंकि एप्लिकेशन बड़ा है और क्लाइंट अनुप्रयोगों को अद्यतन मॉड्यूल संस्करण लोड करना होगा। हमारे कुछ ग्राहकों में वास्तव में धीमे कनेक्शन हैं, इसलिए हर बार सभी मॉड्यूल रोलिंग करने से उन्हें वास्तव में दुखी किया जाएगा।
सहायता बहुत सराहना,
क्रिस
हाय noahz, कि स्पष्टीकरण यह मदद की के लिए धन्यवाद। मुझे एहसास हुआ कि यह काम करेगा अगर मेरे मॉड्यूल में एक दूसरे के लिए निर्भरता नहीं होगी। दुर्भाग्य से वे करते हैं। मुझे एक और विचार था कि इस समस्या को कैसे हल किया जा सकता है और इसके साथ एक नया जवाब बनाया जा सकता है (इस तरह मोर टेक्स्ट लिख सकता है ;-)) –