अपाचे मावेन

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

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

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

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

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

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

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

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

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

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

 सेंट्रल रिपॉजिटरी सर्च इंजन  (सीआरएसई) एक ऐसा खोज इंजन हैं, जिनका उपयोग विभिन्न मुक्त-स्रोत लाइब्रेरी और फ्रेमवर्क के लिए  खोजने के लिए किया जा सकता है।

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

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


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

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

यह भी देखें

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

बाहरी संबंध

 * Maven in 5 minutes
 * Maven in 5 minutes