अपाचे मावेन

अपाचे मावेन एक 'बिल्ड-ऑटोमेशन टूल' है जिसका उपयोग मुख्य रूप से जावा लैंग्वेज की परियोजनाओं के लिए किया जाता है। अपाचे मावेन का उपयोग सी, रूबी, स्काला और अन्य लैंग्वेज में लिखी गई परियोजनाओं (प्रोजेक्ट) को बनाने और प्रबंधित करने के लिए भी किया जा सकता है। मावेन परियोजना को अपाचे सॉफ्टवेयर फाउंडेशन द्वारा प्रारम्भ किया गया है, जहां यह पहले जकार्ता नामक परियोजना का भाग था।

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

अपाचे मावेन को एक प्लग-इन आधारित संरचना का उपयोग करके बनाया गया है जो इसे मानक इनपुट के माध्यम से नियंत्रित किसी भी एप्लिकेशन का उपयोग करने की स्वीकृति देती है। अपाचे मावेन संस्करण 2 के लिए सी /सी++ (प्रोग्रामिंग लैंग्वेज) मे नेटिव प्लग-इन को बनाया गया है।

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

इतिहास
अपाचे मावेन को 2002 में जेसन वैन ज़ाइल द्वारा निर्मित अपाचे टर्बाइन की एक उप-परियोजना के रूप में प्रारम्भ किया गया था। 2003 में इस पर मतदान हुआ और इसे अपाचे सॉफ्टवेयर फाउंडेशन परियोजना के रूप में स्वीकृत किया गया था। जुलाई 2004 में अपाचे मावेन की प्रकाशन महत्वपूर्ण पहला 1.0 संस्करण था। बीटा चक्रों में लगभग छह महीने के बाद अक्टूबर 2005 में अपाचे मावेन संस्करण 2 को v2.0 के रूप मे घोषित किया गया था। अपाचे मावेन 3.0 को अक्टूबर 2010 में प्रकाशित किया गया था जो कि अधिकांश अपाचे मावेन संस्करण 2 के साथ पूर्व संस्करण के संगत था।

अपाचे मावेन 3.0 की जानकारी 2008 में बाहर आना प्रारम्भ हुई। आठ अल्फा प्रकाशन के बाद अपाचे मावेन 3.0 का पहला बीटा संस्करण अप्रैल 2010 में प्रारम्भ किया गया था। अपाचे मावेन 3.0 ने कोर परियोजना निर्मित संरचना को पुनः तैयार किया गया था। जिसके परिणामस्वरूप पीओएम की फ़ाइल-आधारित प्रतिनिधित्व को इससे अलग कर दिया गया था। इसने गैर-एक्सएमएल आधारित परियोजना की फ़ाइलों का लाभ प्राप्त करने के लिए अपाचे मावेन 3.0 ऐड-ऑन की संभावना का विस्तार किया था। साझा की गई लैंग्वेज में रूबी (पहले से ही जेसन वैन ज़ाइल द्वारा निजी प्रोटोटाइप में), वाईएएमएल और ग्रूवी लैंग्वेज सम्मिलित हैं।

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

एल्गोरिथम
अपाचे मावेन परियोजना को परियोजना ऑब्जेक्ट मॉडल (पीओम) का उपयोग करके परिवर्तित किया गया है, जो एक  फ़ाइल में संग्रहीत है। उदाहरण के लिए फ़ाइल इस प्रकार प्रदर्शित होती है:

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

अपाचे मावेन का उपयोग करते हुए, उपयोगकर्ता परियोजना के लिए केवल कॉन्फ़िगरेशन प्रदान करता है, जबकि कॉन्फ़िगर करने योग्य प्लग-इन परियोजना को संकलित करने, लक्ष्य  को साफ़ करने, परीक्षण चलाने, एपीआई दस्तावेज़ तैयार करने आदि का वास्तविक कार्य करते हैं। सामान्यतः उपयोगकर्ताओं को स्वयं प्लग-इन लिखने की आवश्यकता नहीं होनी चाहिए। इसकी तुलना अपाचे एंट और मेक से की जा सकती है। जिसमें उपरोक्त कार्यों को करने के लिए अनिवार्य प्रक्रियाएं कार्यान्वित की जाती हैं।

परियोजना ऑब्जेक्ट मॉडल
एक परियोजना ऑब्जेक्ट मॉडल (पीओएम) एक ही परियोजना के लिए सभी कॉन्फ़िगरेशन प्रदान करता है। सामान्य कॉन्फ़िगरेशन में परियोजना का नाम, उसके मालिक और अन्य परियोजना पर उसकी निर्भरता सम्मिलित होती है। कोई व्यक्ति निर्माण प्रक्रिया के अलग-अलग चरणों को भी कॉन्फ़िगर कर सकता है, जिन्हें प्लगइन के रूप में कार्यान्वित किया जाता है। उदाहरण के लिए, कोई निष्पादन के लिए जावा संस्करण 1.5 का उपयोग करने के लिए कंपाइलर-प्लगइन को कॉन्फ़िगर कर सकता है या कुछ यूनिट परीक्षण विफल होने पर भी परियोजना की पैकेजिंग निर्दिष्ट कर सकता है।

बड़ी परियोजनाओं को कई मॉड्यूल या उप-परियोजनाओं में विभाजित किया जाना चाहिए, जिनमें से प्रत्येक का अपना पीओएम हो। फिर कोई एक रूट पीओएम लिख सकता है जिसके माध्यम से कोई एक ही कमांड के साथ सभी मॉड्यूल संकलित कर सकता है। पीओएम अन्य पीओएम से कॉन्फ़िगरेशन भी प्राप्त कर सकते हैं। सभी पीओएम डिफ़ॉल्ट रूप से सुपर पीओएम से प्राप्त होते हैं। सुपर पीओएम डिफ़ॉल्ट कॉन्फ़िगरेशन प्रदान करता है, जैसे डिफ़ॉल्ट स्रोत निर्देशिकाएं, डिफ़ॉल्ट प्लगइन्स इत्यादि।

प्लग-इन
अपाचे मावेन की अधिकांश कार्यक्षमता प्लग-इन में है। एक प्लगइन लक्ष्यों का एक सेट प्रदान करता है जिसे कमांड  का उपयोग करके निष्पादित किया जा सकता है। उदाहरण के लिए, एक जावा परियोजना को   चलाकर कंपाइलर-प्लगइन के कंपाइल-लक्ष्य के साथ संकलित किया जा सकता है।

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

हालाँकि, यह बोझिल होगा यदि किसी सॉफ़्टवेयर परियोजना के निर्माण, परीक्षण और पैकेजिंग के मूल निर्माण क्रम में प्रत्येक संबंधित लक्ष्य को मैन्युअल रूप से चलाने की आवश्यकता हो:

मावेन की जीवनचक्र अवधारणा इस मुद्दे को संभालती है।

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

जीवनचक्र बनाएं
बिल्ड जीवनचक्र नामित चरणों की एक सूची है जिसका उपयोग लक्ष्य निष्पादन के लिए आदेश देने के लिए किया जा सकता है। मावेन के मानक जीवनचक्रों में से एक डिफ़ॉल्ट जीवनचक्र है, जिसमें इस क्रम में निम्नलिखित चरण सम्मिलित हैं:
 * मान्य करें
 * उत्पन्न-स्रोत
 * प्रक्रिया-स्रोत
 * संसाधन उत्पन्न करें
 * प्रक्रिया-संसाधन
 * संकलित करें
 * प्रक्रिया-परीक्षण-स्रोत
 * प्रक्रिया-परीक्षण-संसाधन
 * परीक्षण-निष्पादन
 * परीक्षा
 * पैकेट
 * स्थापित करना
 * तैनात करना

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

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

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

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

अपाचे मावेन और एंट के बीच मूलभूत अंतर यह है कि अपाचे मावेन का डिज़ाइन सभी परियोजनाओं को एक निश्चित संरचना और समर्थित कार्य कार्य-प्रवाह का एक सेट मानता है उदाहरण के लिए, स्रोत नियंत्रण से संसाधन प्राप्त करना, परियोजना को संकलित करना, इकाई परीक्षण इत्यादि)। जबकि अधिकांश सॉफ्टवेयर परियोजना वास्तव में इन ऑपरेशनों का समर्थन करते हैं और वास्तव में एक अच्छी तरह से परिभाषित संरचना होती है, अपाचे मावेन के लिए आवश्यक है कि इस संरचना और ऑपरेशन कार्यान्वयन विवरण को पीओएम फ़ाइल में परिभाषित किया जाए। इस प्रकार मावेन परियोजनाओं को परिभाषित करने के तरीके और कार्य-प्रवाह की सूची पर एक सम्मेलन पर निर्भर करता है जो सामान्यतः सभी परियोजनाओं में समर्थित होते हैं।

द सेंट्रल जानकारी सर्च इंजन जैसे खोज इंजन हैं, जिनका उपयोग विभिन्न ओपन-सोर्स लाइब्रेरी और फ्रेमवर्क के लिए निर्देशांक खोजने के लिए किया जा सकता है।

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

अंतरसंचालनीयता
जावा प्रोग्रामिंग लैंग्वेज को लक्षित करने वाले कई लोकप्रिय एकीकृत विकास वातावरण (आईडीई) में ऐड-ऑन आईडीई के निर्माण तंत्र और स्रोत संपादन टूल के साथ मावेन का एकीकरण प्रदान करने के लिए सम्मिलित हैं, जिससे मावेन को आईडीई के भीतर से परियोजनाओं को संकलित करने और कोड के लिए क्लासपाथ सेट करने की भी स्वीकृति मिलती है। संकलक त्रुटियों आदि को उजागर करना पूरा करना।

मावेन के साथ विकास का समर्थन करने वाले लोकप्रिय आईडीई के उदाहरणों में सम्मिलित हैं:


 * ग्रहण (सॉफ्टवेयर)
 * NetBeans
 * इंटेलीजे आइडिया
 * जेबिल्डर
 * J डेवलपर (संस्करण 11.1.2)
 * मेरा ग्रहण
 * विजुअल स्टूडियो कोड

ये ऐड-ऑन सीधे आईडीई के भीतर किसी परियोजना की निर्भरता के पूर्ण सेट को निर्धारित करने के लिए पीओएम को संपादित करने या पीओएम का उपयोग करने की क्षमता भी प्रदान करते हैं।

जब आईडीई अब निष्पादन नहीं करता है तो आईडीई की कुछ अंतर्निहित विशेषताएं समाप्त हो जाती हैं। उदाहरण के लिए, एक्लिप्स के जेडीटी में संपादित होने के बाद एकल जावा स्रोत फ़ाइल को पुन: संकलित करने की क्षमता है। कई आईडीई मावेन द्वारा पसंद किए गए फ़ोल्डरों के पदानुक्रम के बजाय परियोजनाओं के एक फ्लैट सेट के साथ कार्य करते हैं। यह अपाचे मावेन का उपयोग करते समय आईडीई में एससीएम सिस्टम के उपयोग को जटिल बनाता है।

यह भी देखें

 * अपाचे कॉन्टिनम
 * अपाचे जेली
 * हडसन (सॉफ्टवेयर)
 * जेनकींस (सॉफ्टवेयर)
 * बिल्ड ऑटोमेशन सॉफ़्टवेयर की सूची

बाहरी संबंध

 * Maven in 5 minutes
 * Maven in 5 minutes