अपाचे मावेन

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

यह भी देखें

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

बाहरी संबंध

 * Maven in 5 minutes
 * Maven in 5 minutes