अपाचे मावेन

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

यह भी देखें

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

बाहरी संबंध

 * Maven in 5 minutes
 * Maven in 5 minutes