क्या यह संभव है ?
हां बेशक। मेरे पास पिछली संरचना में कुछ परियोजनाएं हैं जैसे, यहां कुछ बिट्स मुझे आशा है कि आप शुरू कर देंगे।
मावेन की दो मुख्य विशेषताएं हैं जिनका उपयोग आप चीजों को एक साथ करने के लिए करेंगे:
विभाजन और जीत
आपको अपनी परियोजनाओं को कई स्वतंत्र परियोजनाओं में विभाजित करना होगा। यहां स्वतंत्र से मेरा मतलब है कि परियोजना के बाहर कोड के सभी संदर्भ मावेन में निर्भरता के माध्यम से किए जाते हैं और स्रोत पेड़ को सीधे विलय नहीं करते हैं।
आपके स्रोत वृक्ष की स्थिति के आधार पर यह बहुत काम का प्रतिनिधित्व कर सकता है। यह कहा कि आप मावेन को जूते मारने के लिए नहीं कर रहे हैं बल्कि एक संरचना के रूप में और अपने कोड आधार को साफ करने के लिए कर रहे हैं। इसे अपने टूलशेड के रूप में सोचें, यहां चीजें ढूंढना बहुत आसान है:
यहाँ से:
मावेन सम्मेलन पर बहुत अधिक निर्भर करता है इसलिए बेहतर संगठित आपका सामान अधिक मावेन आपकी मदद कर सकता है। उस ने कहा, आपको अपने स्वयं के सम्मेलन को बेहतर ढंग से फिट करने के लिए इसे फिर से व्यवस्थित करने की आवश्यकता हो सकती है और अगर मुझे यहां एक सलाह देनी है तो यह है कि मावेन के सम्मेलनों को फिट करने के लिए अपने सामान को बदलना आसान है, क्योंकि यह कोशिश करना और उन्हें कॉन्फ़िगर करना है अपने सम्मेलन को समझें।
यदि ये परियोजनाएं मुख्य अनुप्रयोग के बाहर प्रयोग करने योग्य हो सकती हैं तो वे वास्तव में स्वतंत्र पुस्तकालयों के रूप में रह सकते हैं और इसमें मावेन निर्भरता भी शामिल है। उन्हें अपने स्वयं के भंडार में रहना चाहिए (आवेदन स्रोत के पेड़ में नहीं) और मुख्य आवेदन के किसी भी हिस्से पर निर्भर नहीं होना चाहिए।
आपके एप्लिकेशन के मुख्य भाग, एक बार परियोजनाओं में विभाजित होने पर मॉड्यूल के रूप में एक साथ रखे जा सकते हैं। आमतौर पर आपने उन्हें अपने ऐप के मुख्य स्रोत फ़ोल्डर के उप-फ़ोल्डर के रूप में रखा होगा।
इसके अलावा आपके ऐप के लिए आपके मूल POM में मॉड्यूल की घोषणा शामिल होगी। आप अपने ऐप के लिए सभी सामान्य निर्भरता में जगह बनाएंगे और साथ ही अधिकांश बिल्ड प्लगिन और उनके कॉन्फ़िगरेशन की घोषणा करेंगे। यहाँ में भी मैं आपको उन चीजों के लिए गुणों का एक समूह देता हूं, जैसे कि एप्लिकेशन का संस्करण जो आप मॉड्यूल में पुन: उपयोग कर सकते हैं। जब सब कुछ एक ही संस्करण है और एक ही स्थान पर संस्करण होने का प्रबंधन करने के लिए बहुत आसान यह सिर्फ काम करता है।
टूलींग
यदि आप 1 से बड़ी टीम हैं, तो मैं भी दृढ़ता से कहता हूं कि आप अपने मावेन निर्भरता के लिए एक भंडार स्थापित करें। को देखो Artifactory , नेक्सस या Archiva । आप इन्हें सीधे इंस्टॉल करने के लिए POM फाइल को कॉन्फ़िगर कर सकते हैं ताकि एक बार चलने के बाद यह ओवरहेड का अधिक न हो लेकिन आपकी टीम को सही जगह पर सही जार के साथ निर्भरता को हल करने में बहुत समय बचाएगा।
अगला तार्किक कदम टूलींग के विषय पर यहां एक निरंतर एकीकरण प्रणाली है ( जेनकिंस , कई और अधिक हैं)। यह परीक्षणों को चलाने वाले स्रोत को बनाने और आर्टिफैक्ट को धकेलने का काम करेगा, इस सब के साथ आपको जो करना है वह कोड और बाकी काम करता है।
चूंकि आप युद्ध के निर्माण के लिए अपने ऐप की पैकेजिंग कर रहे हैं , युद्ध के निर्माण को संभाल सकते हैं और जार फ़ाइलों या अन्य समान कार्यों को मर्ज किए बिना सभी निर्भरता को उनके उचित स्थानों पर रख सकते हैं, इसलिए वहां कोई चिंता नहीं है।
उदाहरण
मैं यहां बहुत लंबे समय तक जा सकता था लेकिन एक अच्छा उदाहरण नहीं है। समान परिमाण की परियोजनाओं के लिए गिटब पर देखें और देखें कि उन्होंने अपनी पोम फाइलें और फ़ोल्डर पदानुक्रम कैसे बनाए। एक से अधिक को देखें, कुछ आपके सेटअप को दूसरों की तुलना में बेहतर रूप से फिट करेंगे, कोई भी वास्तव में सच नहीं होगा, लेकिन आपको अपने विचारों को पूरा करने के लिए पर्याप्त होना चाहिए कि इसे कैसे प्राप्त किया जाए।
उदाहरण के लिए जेनकिंस लें :
आप देख सकते हैं कि उनके अभिभावक POM काफी व्यापक हैं।
वे मॉड्यूल का उपयोग करते हैं जैसा कि आप इस अनुभाग में देख सकते हैं:
<modules>
<module>core</module>
<module>war</module>
<module>test</module>
<module>cli</module>
</modules>
और प्रत्येक मॉड्यूल एक उप-फ़ोल्डर के साथ एक ही नाम से मेल खाता है जिसमें POM भी शामिल है। आप इस तरह से जितने चाहें उतने घोंसले बना सकते हैं, हालांकि इसे पवित्रता के स्तर के भीतर रखें;)।
छोटा शुरू करो
यदि आपने मावेन का उपयोग कभी नहीं किया है, तो मैं आपको सुझाव देना चाहूंगा कि आप अभी मॉड्यूल से शुरू न करें। इसे धीमा करें, इसके साथ शुरू करें, जो आपके पास हो सकता है उनमें से एक सरल पुस्तकालय कहें और इसे एक मावेन प्रोजेक्ट बनाएं। फिर अपने मुख्य आवेदन को एक सरल मावेन परियोजना बनाएं। एक बार उस काम के बाद, सरल निर्भरताएं जोड़ना शुरू करें, फिर अपना पहला मॉड्यूल और इसी तरह विभाजित करें।
मावेन एक महान उपकरण है लेकिन यह गर्दन में एक सुपर दर्द भी हो सकता है, खासकर जब चीजें आपके रास्ते में नहीं जा रही हों। अपने पहले जाने पर पूरे धाम से शुरू करना आपदा के लिए एक प्राप्तकर्ता है (मेरे लिए था!)।
यदि चीजें थोड़ी अजीब हैं, तो आप हमेशा mvn help:effective-pom
यह देखने के लिए कमांड का उपयोग कर सकते हैं कि मावेन वास्तव में क्या समझ रहा था।
प्लग-इन
आपकी टिप्पणी से मैं बेहतर समझता हूं कि आप क्या हासिल करना चाहते हैं। इस मामले में मैं प्लगइन्स दृष्टिकोण के लिए जाना होगा। एक प्रोजेक्ट बनाएं जो एक्स्टेंशन पॉइंट के एपीआई को उजागर करता है जहां आप काम को अलग करना चाहते हैं। फिर आप इसे एक नई परियोजना में निर्भरता के रूप में उपयोग कर सकते हैं जो इसे लागू करेगा। अपने मुख्य आवेदन में बस इन कार्यान्वयनों के लिए उचित निर्भरता जोड़ें (इस समय मावेन मॉड्यूल का उपयोग नहीं कर रहे हैं) और आपको जाने के लिए अच्छा होना चाहिए। आखिरकार मुख्य एप्लिकेशन प्रोजेक्ट लगभग कोई स्रोत कोड नहीं ले जाएगा जो बाहरी परियोजनाओं में किया जा रहा है और निर्भरता के माध्यम से लोड किया जा रहा है।
आपको इस दृष्टिकोण के साथ पूरे आवेदन को फिर से तैनात करने की आवश्यकता होगी, भले ही कोर बदल गया हो या न हो क्योंकि युद्ध निर्भरता से सांख्यिकीय रूप से बनाया गया है, उनमें से एक को बदलने से तात्पर्य पूरी बात के पुनर्निर्माण से है। यह वास्तव में सबसे बुरा लगता है, वास्तव में केवल नए परिवर्तन वास्तव में निर्मित होंगे, बाकी मूल रूप से पिछले जार (एस) की एक प्रति होगी। लेकिन चूंकि सब कुछ युद्ध की फाइल में है, इसलिए इसे फिर से बनाना होगा, और सर्वर को बंद करने और फिर से चालू करने की आवश्यकता होगी।
यदि आपको आगे बढ़ने की आवश्यकता है तो एक बालक थोड़ा अधिक जटिल हो जाएगा, हालांकि असंभव नहीं है। मुझे लगता है कि आप OSGI को देख लेंगे, Apache फेलिक्स आपको आरंभ कर सकता है, हालांकि अन्य कार्यान्वयन भी हैं। इससे आप बाहरी जार ले सकते हैं और उन्हें उचित प्लग इन में बना सकते हैं। आप गतिशील रिलोड और अपडेट के लिए दरवाजा खोलने वाले घटकों के रनटाइम जीवनचक्र पर बहुत अधिक नियंत्रण प्राप्त करेंगे। हालांकि इसे फिर से अपने मूल में बड़े बदलाव की आवश्यकता होगी, शायद एक अच्छा प्रारंभिक बिंदु नहीं। हालाँकि एक बार जब आपके पास एक परियोजना होती है जो अच्छी तरह से अलग हो जाती है और सभी भागों को आपके इच्छित तरीके से अलग कर दिया जाता है, तो यह एक स्वाभाविक अगला कदम हो सकता है यदि आवेदन शुरू करना और अपडेट पर रोकना एक बड़ी समस्या है।
मॉड्यूल और निर्भरता के बीच मूल अंतर यह है:
- मॉड्यूल मुख्य स्रोत के रूप में एक ही स्रोत के पेड़ में रहेंगे, आदर्श रूप से उप-फ़ोल्डर्स के रूप में।
- निर्भरता कहीं भी हो सकती है।
आप यहाँ बाइबिल पा सकते हैं ।
उम्मीद है कि इससे मदद करेगी, सुसंयोग।