अपाचे मावेन: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 14: Line 14:
}}
}}


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


अपाचे मावेन सॉफ्टवेयर निर्माण के दो संस्करणों पर चर्चा करता है कि सॉफ्टवेयर कैसे बनाया जाता है और उसकी निर्भरताएँ [[अपाचे चींटी|अपाचे एंट]] जैसे पुराने टूल के विपरीत निर्माण प्रक्रिया के लिए कैसे संस्करणों का उपयोग करती है। सामान्यतः इसमे केवल एक्सेप्शन निर्दिष्ट करने की आवश्यकता होती है। [[XML|एक्सएमएल]] फ़ाइले बनाए जा रहे सॉफ़्टवेयर या अन्य बाहरी मॉड्यूल और फंक्शनों पर इसकी निर्भरता <code>build_order</code>, <code>directory</code> और आवश्यक प्लग-इन का वर्णन करती है। यह कोड के निष्पादन और इसकी पैकेजिंग जैसे कुछ अच्छी तरह से परिभाषित कार्यों को करने के लिए पूर्व-निर्धारित लक्ष्यों के साथ आता है। अपाचे मावेन गतिशील रूप से एक या अधिक जानकारी जैसे अपाचे मावेन संस्करण 2 मुख्य जावा लाइब्रेरी और अपाचे मावेन प्लग-इन को डाउनलोड करता है और उन्हें स्थानीय कैश में संग्रहीत करता है।<ref name="maven2repo">{{cite web|url=http://repo1.maven.org/maven2/|title=Index of /maven2/|access-date=2009-04-15|archive-url=https://web.archive.org/web/20180917061140/http://repo1.maven.org/maven2/|archive-date=2018-09-17|url-status=dead}}</ref> डाउनलोड की गई फ़ाइलों के इस स्थानीय कैश को स्थानीय परियोजनाओं द्वारा बनाई गई फ़ाइलों के साथ भी अपडेट किया जा सकता है। इसके साथ ही सार्वजनिक जानकारी को भी अपडेट किया जा सकता है।
अपाचे मावेन सॉफ्टवेयर निर्माण के दो संस्करणों पर चर्चा करता है कि सॉफ्टवेयर कैसे बनाया जाता है और उसकी निर्भरताएँ [[अपाचे चींटी|अपाचे एंट]] जैसे पुराने टूल के विपरीत निर्माण प्रक्रिया के लिए कैसे संस्करणों का उपयोग करती है। सामान्यतः इसमे केवल एक्सेप्शन निर्दिष्ट करने की आवश्यकता होती है। [[XML|एक्सएमएल]] फ़ाइले बनाए जा रहे सॉफ़्टवेयर या अन्य बाहरी मॉड्यूल और फंक्शनों पर इसकी निर्भरता <code>build_order</code>, <code>directory</code> और आवश्यक प्लग-इन का वर्णन करती है। यह कोड के निष्पादन और इसकी पैकेजिंग जैसे कुछ अच्छी तरह से परिभाषित कार्यों को करने के लिए पूर्व-निर्धारित लक्ष्यों के साथ आता है। अपाचे मावेन गतिशील रूप से एक या अधिक जानकारी जैसे अपाचे मावेन संस्करण 2 मुख्य जावा लाइब्रेरी और अपाचे मावेन प्लग-इन को डाउनलोड करता है और उन्हें स्थानीय कैश में संग्रहीत करता है।<ref name="maven2repo">{{cite web|url=http://repo1.maven.org/maven2/|title=Index of /maven2/|access-date=2009-04-15|archive-url=https://web.archive.org/web/20180917061140/http://repo1.maven.org/maven2/|archive-date=2018-09-17|url-status=dead}}</ref> डाउनलोड की गई फ़ाइलों के इस स्थानीय कैश को स्थानीय परियोजनाओं द्वारा बनाई गई फ़ाइलों के साथ भी अपडेट किया जा सकता है। इसके साथ ही सार्वजनिक जानकारी को भी अपडेट किया जा सकता है।
Line 20: Line 20:
अपाचे मावेन को एक प्लग-इन आधारित संरचना का उपयोग करके बनाया गया है जो इसे मानक इनपुट के माध्यम से नियंत्रित किसी भी एप्लिकेशन का उपयोग करने की स्वीकृति देती है। अपाचे मावेन संस्करण 2 के लिए [[सी (प्रोग्रामिंग भाषा)|सी]] /[[सी++]] [[Index.php?title=(प्रोग्रामिंग भाषा)|(प्रोग्रामिंग लैंग्वेज)]] मे नेटिव प्लग-इन को बनाया गया है।<ref>{{cite web|url=http://www.mojohaus.org/maven-native/native-maven-plugin/|title=मोजोहॉस नेटिव मावेन प्लगइन|first=Trygve|last=Laugstol}}</ref>
अपाचे मावेन को एक प्लग-इन आधारित संरचना का उपयोग करके बनाया गया है जो इसे मानक इनपुट के माध्यम से नियंत्रित किसी भी एप्लिकेशन का उपयोग करने की स्वीकृति देती है। अपाचे मावेन संस्करण 2 के लिए [[सी (प्रोग्रामिंग भाषा)|सी]] /[[सी++]] [[Index.php?title=(प्रोग्रामिंग भाषा)|(प्रोग्रामिंग लैंग्वेज)]] मे नेटिव प्लग-इन को बनाया गया है।<ref>{{cite web|url=http://www.mojohaus.org/maven-native/native-maven-plugin/|title=मोजोहॉस नेटिव मावेन प्लगइन|first=Trygve|last=Laugstol}}</ref>


बिल्ड टूल के रूप में ग्रैडल और [[एसबीटी]] जैसी वैकल्पिक प्रौद्योगिकियां एक्सएमएल पर निर्भर नहीं हैं, लेकिन मावेन द्वारा प्रस्तुत की गई प्रमुख अवधारणाओं को सुरक्षित रखती हैं। [[अपाचे आइवी]] के साथ एक समर्पित निर्भरता प्रबंधक को विकसित किया गया था जो अपाचे मावेन जानकारी का भी समर्थन करता है।<ref>{{Cite web|url=https://ant.apache.org/ivy/history/2.2.0/resolver/ibiblio.html|title=IBiblio Resolver &#124; Apache Ivy™}}</ref> अपाचे मावेन को प्रतिलिपि प्रस्तुत करने योग्य बिल्ड ऑटोमेशन टूल के लिए समर्थन प्राप्त है।<ref>{{Cite web|url=https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=74682318|title=Reproducible/Verifiable Builds - Apache Maven - Apache Software Foundation|website=cwiki.apache.org}}</ref><ref>{{Cite web|url=https://dzone.com/articles/reproducible-builds-in-java|title=जावा में प्रतिलिपि प्रस्तुत करने योग्य बिल्ड - डीज़ोन जावा|website=dzone.com}}</ref>
बिल्ड टूल के रूप में ग्रैडल और [[एसबीटी]] जैसी वैकल्पिक प्रौद्योगिकियां एक्सएमएल पर निर्भर नहीं हैं, लेकिन अपाचे मावेन द्वारा प्रस्तुत की गई प्रमुख अवधारणाओं को सुरक्षित रखती हैं। [[अपाचे आइवी]] के साथ एक समर्पित निर्भरता प्रबंधक को विकसित किया गया था जो अपाचे मावेन जानकारी का भी समर्थन करता है।<ref>{{Cite web|url=https://ant.apache.org/ivy/history/2.2.0/resolver/ibiblio.html|title=IBiblio Resolver &#124; Apache Ivy™}}</ref> अपाचे मावेन को प्रतिलिपि प्रस्तुत करने योग्य बिल्ड ऑटोमेशन टूल के लिए समर्थन प्राप्त है।<ref>{{Cite web|url=https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=74682318|title=Reproducible/Verifiable Builds - Apache Maven - Apache Software Foundation|website=cwiki.apache.org}}</ref><ref>{{Cite web|url=https://dzone.com/articles/reproducible-builds-in-java|title=जावा में प्रतिलिपि प्रस्तुत करने योग्य बिल्ड - डीज़ोन जावा|website=dzone.com}}</ref>
== इतिहास ==
== इतिहास ==
[[File:Maven repository artifact growth.png|thumb|मावेन केंद्रीय भंडार पर फ़ाइलों की संख्या तेजी से बढ़ी है]]अपाचे मावेन को 2002 में जेसन वैन ज़ाइल द्वारा निर्मित [[अपाचे टर्बाइन]] की एक उप-परियोजना के रूप में प्रारम्भ किया गया था। 2003 में इस पर मतदान हुआ और इसे [[अपाचे सॉफ्टवेयर फाउंडेशन]] परियोजना के रूप में स्वीकृत किया गया था। जुलाई 2004 में अपाचे मावेन की प्रकाशन महत्वपूर्ण पहला 1.0 संस्करण था। बीटा चक्रों में लगभग छह महीने के बाद अक्टूबर 2005 में अपाचे मावेन संस्करण 2 को v2.0 के रूप मे घोषित किया गया था। अपाचे मावेन 3.0 को अक्टूबर 2010 में प्रकाशित किया गया था जो कि अधिकांश अपाचे मावेन संस्करण 2 के साथ पूर्व संस्करण के संगत था।
[[File:Maven repository artifact growth.png|thumb|अपाचे मावेन केंद्रीय भंडार पर फ़ाइलों की संख्या तेजी से बढ़ी है]]अपाचे मावेन को 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 की जानकारी 2008 में बाहर आना प्रारम्भ हुई। आठ अल्फा प्रकाशन के बाद अपाचे मावेन 3.0 का पहला बीटा संस्करण अप्रैल 2010 में प्रारम्भ किया गया था। अपाचे मावेन 3.0 ने कोर परियोजना निर्मित संरचना को पुनः तैयार किया गया था। जिसके परिणामस्वरूप पीओएम की फ़ाइल-आधारित प्रतिनिधित्व को इससे अलग कर दिया गया था। इसने गैर-एक्सएमएल आधारित परियोजना की फ़ाइलों का लाभ प्राप्त करने के लिए अपाचे मावेन 3.0 ऐड-ऑन की संभावना का विस्तार किया था। साझा की गई लैंग्वेज में रूबी (पहले से ही जेसन वैन ज़ाइल द्वारा निजी प्रोटोटाइप में), [[वाईएएमएल]] और [[ग्रूवी (प्रोग्रामिंग भाषा)|ग्रूवी]] लैंग्वेज सम्मिलित हैं।
Line 52: Line 52:
</project>
</project>
</syntaxhighlight>
</syntaxhighlight>
यह [[प्रोजेक्ट ऑब्जेक्ट मॉडल|मॉडल]] केवल परियोजना के लिए एक अद्वितीय पहचानकर्ता और <code>JUnit</code> संरचना पर इसकी निर्भरता को परिभाषित करता है। हालाँकि यह परियोजना बनाने और परियोजना से संबद्ध इकाई परीक्षण को चलाने के लिए पहले से ही पर्याप्त है। अपाचे मावेन कॉन्फ़िगरेशन पर फंक्शन के विचार को स्वीकृत करके इसे पूरा करता है, अर्थात यह अपाचे मावेन परियोजना के कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट मान प्रदान करता है। एक सामान्य अपाचे मावेन परियोजना की <code>directory</code> संरचना में निम्नलिखित <code>directory</code> प्रविष्टियाँ होती हैं:[[file:Maven CoC.svg|thumb|जावा परियोजना के लिए एक निर्देशिका संरचना मावेन द्वारा स्वतः उत्पन्न होती है]]
यह [[प्रोजेक्ट ऑब्जेक्ट मॉडल|मॉडल]] केवल परियोजना के लिए एक अद्वितीय पहचानकर्ता और <code>JUnit</code> संरचना पर इसकी निर्भरता को परिभाषित करता है। हालाँकि यह परियोजना बनाने और परियोजना से संबद्ध इकाई परीक्षण को चलाने के लिए पहले से ही पर्याप्त है। अपाचे मावेन कॉन्फ़िगरेशन पर फंक्शन के विचार को स्वीकृत करके इसे पूरा करता है, अर्थात यह अपाचे मावेन परियोजना के कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट मान प्रदान करता है। एक सामान्य अपाचे मावेन परियोजना की <code>directory</code> संरचना में निम्नलिखित <code>directory</code> प्रविष्टियाँ होती हैं:[[file:Maven CoC.svg|thumb|जावा परियोजना के लिए एक निर्देशिका संरचना अपाचे मावेन द्वारा स्वतः उत्पन्न होती है]]
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 80: Line 80:


=== परियोजना ऑब्जेक्ट मॉडल ===
=== परियोजना ऑब्जेक्ट मॉडल ===
एक परियोजना ऑब्जेक्ट मॉडल (पीओएम) एक ही परियोजना के लिए सभी कॉन्फ़िगरेशन प्रदान करता है।<ref>[https://maven.apache.org/pom.html POM Reference]
परियोजना ऑब्जेक्ट मॉडल (पीओएम) एक ही परियोजना के लिए कई कॉन्फ़िगरेशन प्रदान करता है।<ref>[https://maven.apache.org/pom.html POM Reference]
</ref> सामान्य कॉन्फ़िगरेशन में परियोजना का नाम, उसके मालिक और अन्य परियोजना पर उसकी निर्भरता सम्मिलित होती है। कोई व्यक्ति निर्माण प्रक्रिया के अलग-अलग चरणों को भी कॉन्फ़िगर कर सकता है, जिन्हें प्लगइन के रूप में कार्यान्वित किया जाता है। उदाहरण के लिए, कोई निष्पादन के लिए जावा संस्करण 1.5 का उपयोग करने के लिए कंपाइलर-प्लगइन को कॉन्फ़िगर कर सकता है या कुछ यूनिट परीक्षण विफल होने पर भी परियोजना की पैकेजिंग निर्दिष्ट कर सकता है।
</ref> सामान्य कॉन्फ़िगरेशन में परियोजना का नाम, उसके विकासक और अन्य परियोजना पर उसकी निर्भरता सम्मिलित होती है। कोई व्यक्ति निर्माण प्रक्रिया के अलग-अलग चरणों को भी कॉन्फ़िगर कर सकता है। जिन्हें प्लग-इन के रूप में कार्यान्वित किया जाता है। उदाहरण के लिए कार्यान्वित जावा संस्करण 1.5 का उपयोग करने के लिए कंपाइलर प्लग-इन को कॉन्फ़िगर कर सकता है या कुछ यूनिट परीक्षण विफल होने पर परियोजना की पैकेजिंग निर्दिष्ट कर सकता है।


बड़ी परियोजनाओं को कई मॉड्यूल या उप-परियोजनाओं में विभाजित किया जाना चाहिए, जिनमें से प्रत्येक का अपना पीओएम हो। फिर कोई एक रूट पीओएम लिख सकता है जिसके माध्यम से कोई एक ही कमांड के साथ सभी मॉड्यूल संकलित कर सकता है। पीओएम अन्य पीओएम से कॉन्फ़िगरेशन भी प्राप्त कर सकते हैं। सभी पीओएम डिफ़ॉल्ट रूप से सुपर पीओएम से प्राप्त होते हैं। सुपर पीओएम डिफ़ॉल्ट कॉन्फ़िगरेशन प्रदान करता है, जैसे डिफ़ॉल्ट स्रोत निर्देशिकाएं, डिफ़ॉल्ट प्लगइन्स इत्यादि।<ref>[https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Super_POM Super POM]
आपेक्षकृत बड़ी परियोजनाओं को कई मॉड्यूल या उप-परियोजनाओं में विभाजित किया जाना चाहिए, जिनमें से प्रत्येक का अपना पीओएम हो। फिर कोई एक फंक्शन पीओएम लिख सकता है जिसके माध्यम से कोई भी एक ही कमांड के साथ सभी मॉड्यूल को कार्यान्वित कर सकता है। पीओएम अन्य पीओएम से कॉन्फ़िगरेशन भी प्राप्त कर सकते हैं। सभी पीओएम डिफ़ॉल्ट रूप से उच्च पीओएम से प्राप्त होते हैं। उच्च पीओएम डिफ़ॉल्ट कॉन्फ़िगरेशन जैसे डिफ़ॉल्ट स्रोत <code>directory</code>, डिफ़ॉल्ट <code>plugin</code> प्रदान करता है।<ref>[https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Super_POM Super POM]
</ref>
</ref>


=== प्लग-इन ===
=== प्लग-इन ===
अपाचे मावेन की अधिकांश कार्यक्षमता प्लग-इन में है। एक प्लगइन लक्ष्यों का एक सेट प्रदान करता है जिसे कमांड <code>mvn [plugin-name]:[goal-name]</code> का उपयोग करके निष्पादित किया जा सकता है। उदाहरण के लिए, एक जावा परियोजना को <code>mvn compiler:compile</code> चलाकर कंपाइलर-प्लगइन के कंपाइल-लक्ष्य के साथ संकलित किया जा सकता है।<ref>{{cite web|url=https://maven.apache.org/plugins/maven-compiler-plugin/|title=Apache Maven Compiler Plugin – Introduction|first=Edwin|last=Punzalan}}</ref>
अपाचे मावेन की अधिकांश कार्यक्षमता <code>plugin</code> में होती है। एक <code>plugin</code> लक्ष्यों का एक फंक्शन प्रदान करता है जिसे कमांड <code>mvn [plugin-name]:[goal-name]</code> का उपयोग करके निष्पादित किया जा सकता है। उदाहरण के लिए एक जावा परियोजना को <code>mvn compiler:compile</code> मे <code>compiler</code><code>plugin</code> के कंपाइल-लक्ष्य के साथ संकलित किया जा सकता है।<ref>{{cite web|url=https://maven.apache.org/plugins/maven-compiler-plugin/|title=Apache Maven Compiler Plugin – Introduction|first=Edwin|last=Punzalan}}</ref> निर्माण, परीक्षण, स्रोत नियंत्रण प्रबंधन, वेब सर्वर चलाने, एक्लिप्स परियोजना फ़ाइलें उत्पन्न करने के लिए अपाचे मावेन <code>plugin</code> होते हैं।<ref>{{cite web|url=https://maven.apache.org/plugins/index.html|title=Maven – Available Plugins|first=Brett Porter Jason van Zyl Dennis Lundberg Olivier Lamy Benson Margulies Karl-Heinz|last=Marbaise}}</ref> <code>plugin</code> को <code>pom.xml</code> फ़ाइल के <code><plugin></code>  भाग में प्रस्तुत और परिवर्तित किया जाता है। प्रत्येक परियोजना में कुछ मूल <code>plugin</code> डिफ़ॉल्ट <code>plugin के</code>रूप से सम्मिलित होते हैं और उनमें डिफ़ॉल्ट सेटिंग्स होती हैं। हालाँकि किसी सॉफ़्टवेयर परियोजना के निर्माण, परीक्षण और पैकेजिंग के मूल निर्माण क्रम में प्रत्येक संबंधित लक्ष्य को मैन्युअल रूप से चलाने की आवश्यकता होती है:
 
निर्माण, परीक्षण, स्रोत नियंत्रण प्रबंधन, वेब सर्वर चलाने, एक्लिप्स परियोजना फ़ाइलें उत्पन्न करने और बहुत कुछ के लिए मावेन प्लगइन्स हैं।<ref>{{cite web|url=https://maven.apache.org/plugins/index.html|title=Maven – Available Plugins|first=Brett Porter Jason van Zyl Dennis Lundberg Olivier Lamy Benson Margulies Karl-Heinz|last=Marbaise}}</ref> प्लगइन्स को <code>pom.एक्सएमएल</code> फ़ाइल के <प्लगइन्स>-सेक्शन में प्रस्तुत और कॉन्फ़िगर किया जाता है। प्रत्येक परियोजना में कुछ बुनियादी प्लगइन्स डिफ़ॉल्ट रूप से सम्मिलित होते हैं, और उनमें समझदार डिफ़ॉल्ट सेटिंग्स होती हैं।
 
हालाँकि, यह बोझिल होगा यदि किसी सॉफ़्टवेयर परियोजना के निर्माण, परीक्षण और पैकेजिंग के मूल निर्माण क्रम में प्रत्येक संबंधित लक्ष्य को मैन्युअल रूप से चलाने की आवश्यकता हो:


* <code>mvn compiler:compile</code>
* <code>mvn compiler:compile</code>
* <code>mvn surefire:test</code>
* <code>mvn surefire:test</code>
* <code>mvn jar:jar</code>
* <code>mvn jar:jar</code>
मावेन की जीवनचक्र अवधारणा इस मुद्दे को संभालती है।
अपाचे मावेन की कार्यान्वित अवधारणा इस विषय को प्रदर्शित करती है कि <code>plugin</code> अपाचे मावेन का विस्तार करने का प्राथमिक तरीका है। अपाचे मावेन <code>plugin</code> का विकास <code>org.apache.maven</code> <code>.plugin .AbstractMojo</code>क्लास का विस्तार करके किया जा सकता है। एप्लिकेशन सर्वर चलाने वाली क्लाउड-आधारित वर्चुअल मशीन बनाने के लिए अपाचे मावेन <code>plugin</code> का उदाहरण कोड और स्पष्टीकरण क्लाउड वर्चुअल मशीनों के स्वचालित विकास कोड को प्रबंधन लेख में दिया गया है।<ref>{{Cite journal| last=Amies| first=Alex|author2=Zou P X |author3=Wang Yi S | title=क्लाउड वर्चुअल मशीनों का स्वचालित विकास और प्रबंधन|journal=IBM DeveloperWorks|publisher=IBM|date=29 Oct 2011| url=http://www.ibm.com/developerworks/cloud/library/cl-automatecloud/index.html}}</ref>
 
=== बिल्ड-जीवनचक्र ===
प्लगइन्स मावेन का विस्तार करने का प्राथमिक तरीका है। Maven प्लगइन का विकास <code>org.apache.maven.plugin.AbstractMojo</code>क्लास का विस्तार करके किया जा सकता है। एप्लिकेशन सर्वर चलाने वाली क्लाउड-आधारित वर्चुअल मशीन बनाने के लिए मावेन प्लगइन का उदाहरण कोड और स्पष्टीकरण क्लाउड वर्चुअल मशीनों के स्वचालित विकास और प्रबंधन लेख में दिया गया है।<ref>{{Cite journal| last=Amies| first=Alex|author2=Zou P X |author3=Wang Yi S | title=क्लाउड वर्चुअल मशीनों का स्वचालित विकास और प्रबंधन|journal=IBM DeveloperWorks|publisher=IBM|date=29 Oct 2011| url=http://www.ibm.com/developerworks/cloud/library/cl-automatecloud/index.html}}</ref>
बिल्ड-जीवनचक्र नामित चरणों की एक सूची है जिसका उपयोग लक्ष्य निष्पादन के लिए किया जा सकता है। अपाचे मावेन के मानक जीवनचक्रों में से एक डिफ़ॉल्ट जीवनचक्र है, जिसमें निम्नलिखित क्रम मे कई चरण सम्मिलित हैं:<ref>{{cite web|url=https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference|title=Maven – Introduction to the Build Lifecycle|first=Brett|last=Porter}}</ref>
=== जीवनचक्र बनाएं ===
* मान्यता
बिल्ड जीवनचक्र नामित चरणों की एक सूची है जिसका उपयोग लक्ष्य निष्पादन के लिए आदेश देने के लिए किया जा सकता है। मावेन के मानक जीवनचक्रों में से एक डिफ़ॉल्ट जीवनचक्र है, जिसमें इस क्रम में निम्नलिखित चरण सम्मिलित हैं:<ref>{{cite web|url=https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference|title=Maven – Introduction to the Build Lifecycle|first=Brett|last=Porter}}</ref>
*बिल्ड-स्रोत
* मान्य करें
* प्रसंस्करण-स्रोत
*उत्पन्न-स्रोत
*निर्मित-संसाधन
* प्रक्रिया-स्रोत
* प्रसंस्करण-संसाधन
*संसाधन उत्पन्न करें
* निष्पादन
* प्रक्रिया-संसाधन
* प्रसंस्करण-परीक्षण-स्रोत
* संकलित करें
* प्रसंस्करण-परीक्षण-संसाधन
* प्रक्रिया-परीक्षण-स्रोत
* प्रक्रिया-परीक्षण-संसाधन
* परीक्षण-निष्पादन
* परीक्षण-निष्पादन
* परीक्षा
* परीक्षण
* पैकेट
* पैकेज
* स्थापित करना
* संस्थापन
* तैनात करना
* प्रसारण
 
प्लगइन्स द्वारा प्रदान किए गए लक्ष्य जीवनचक्र के विभिन्न चरणों से जुड़े हो सकते हैं। उदाहरण के लिए, डिफ़ॉल्ट रूप से, लक्ष्य "संकलक: निष्पादन" "निष्पादन" चरण से जुड़ा होता है, जबकि लक्ष्य "अचूक: परीक्षण" "परीक्षण" चरण से जुड़ा होता है। जब <code>mvn_test</code> कमांड निष्पादित किया जाता है, तो मावेन <code>test</code> चरण तक और इसमें सम्मिलित प्रत्येक चरण से जुड़े सभी लक्ष्यों को चलाता है। ऐसे मामले में, मावेन "प्रक्रिया-संसाधन" चरण से जुड़े "संसाधन:संसाधन" लक्ष्य को चलाता है, फिर "संकलक:निष्पादन" को चलाता है और इसी प्रकार जब तक यह अंततः "अचूक:परीक्षण" लक्ष्य को नहीं चलाता।


अपाचे मावेन के पास परियोजना की सफाई और परियोजना स्थल तैयार करने के लिए मानक चरण भी हैं। यदि सफाई डिफ़ॉल्ट जीवनचक्र का हिस्सा होती, तो परियोजना के निर्माण के समय हर बार उसे साफ किया जाता। यह स्पष्ट रूप से अवांछनीय है, इसलिए सफाई को अपना स्वयं का जीवनचक्र दिया गया है।
<code>plugin</code> द्वारा प्रदान किए गए लक्ष्य जीवनचक्र के विभिन्न चरणों से संबद्ध हो सकते हैं। उदाहरण के लिए डिफ़ॉल्ट रूप से लक्ष्य <code>compiler:compile</code> <code>'cocmpile'</code> चरण से संबद्ध होता है, जबकि लक्ष्य  <code>surefire:test</code> <code>test</code> चरण से संबद्ध होता है। जब <code>mvn_test</code> कमांड को निष्पादित किया जाता है, तो अपाचे मावेन <code>test</code> चरण तक और इसमें सम्मिलित प्रत्येक चरण से संबद्ध सभी लक्ष्यों को निष्पादित करता है। ऐसी स्थिति में अपाचे मावेन "प्रक्रिया-संसाधन" चरण से संबद्ध <code>resources:resources</code> लक्ष्य को निष्पादित करता है फिर <code>compiler:compile</code> को निष्पादित करता है और इसी प्रकार जब तक यह अंततः <code>surefire:test</code> लक्ष्य को नहीं निष्पादित करता है। अपाचे मावेन के पास परियोजना को <code>clean</code> और परियोजना स्थल तैयार करने के लिए मानक चरण भी हैं। यदि <code>cleaning</code> डिफ़ॉल्ट जीवनचक्र का भाग होती है, तो परियोजना के निर्माण के समय प्रत्येक बार उसे <code>clean</code> किया जाता है। यह स्पष्ट रूप से अवांछनीय है, इसलिए <code>cleaning</code> को अपना स्वयं का जीवनचक्र दिया गया है।  


मानक जीवनचक्र किसी परियोजना में नए उपयोगकर्ताओं को एकल कमांड <code>mvn_install</code> जारी करके प्रत्येक मावेन परियोजना को सटीक रूप से बनाने, परीक्षण करने और स्थापित करने की क्षमता प्रदान करता है। डिफ़ॉल्ट रूप से, मावेन पीओम फ़ाइल को जेनरेट की गई JAR और WAR फ़ाइलों में पैकेज करता है। <code>Diet4j</code> जैसे उपकरण इस जानकारी का उपयोग रन-टाइम पर मावेन मॉड्यूल को पुनरावर्ती रूप से हल करने और चलाने के लिए कर सकते हैं, बिना <code>"uber" -jar</code>की आवश्यकता के जिसमें सभी परियोजना कोड सम्मिलित हैं।<ref>{{cite web|url=http://diet4j.org/|title=diet4j - put Java JARs on a diet, and load maven modules as needed}}</ref>
मानक जीवनचक्र किसी परियोजना में नए उपयोगकर्ताओं को एकल कमांड <code>mvn_install</code> प्रारम्भ करके प्रत्येक अपाचे मावेन परियोजना को शुद्ध रूप से बनाने, परीक्षण करने और स्थापित करने की क्षमता प्रदान करता है। डिफ़ॉल्ट रूप से अपाचे मावेन पीओम फ़ाइल को बनाई गई <code>jar</code> और <code>WAR</code> फ़ाइलों में पैकेज करता है। <code>Diet4j</code> जैसे उपकरण इस जानकारी का उपयोग रन-टाइम पर अपाचे मावेन मॉड्यूल को पुनरावर्ती रूप से हल करने और निष्पादित करने के लिए कर सकते हैं। जिसमे बिना <code>"uber" -jar</code>की आवश्यकता के सभी परियोजना कोड सम्मिलित होते हैं।<ref>{{cite web|url=http://diet4j.org/|title=diet4j - put Java JARs on a diet, and load maven modules as needed}}</ref>


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


अपाचे मावेन और एंट के बीच मूलभूत अंतर यह है कि अपाचे मावेन का डिज़ाइन सभी परियोजनाओं को एक निश्चित संरचना और समर्थित कार्य कार्य-प्रवाह का एक सेट मानता है उदाहरण के लिए, स्रोत नियंत्रण से संसाधन प्राप्त करना, परियोजना को संकलित करना, इकाई परीक्षण इत्यादि)। जबकि अधिकांश सॉफ्टवेयर परियोजना वास्तव में इन ऑपरेशनों का समर्थन करते हैं और वास्तव में एक अच्छी तरह से परिभाषित संरचना होती है, अपाचे मावेन के लिए आवश्यक है कि इस संरचना और ऑपरेशन कार्यान्वयन विवरण को पीओएम फ़ाइल में परिभाषित किया जाए। इस प्रकार मावेन परियोजनाओं को परिभाषित करने के तरीके और कार्य-प्रवाह की सूची पर एक सम्मेलन पर निर्भर करता है जो सामान्यतः सभी परियोजनाओं में समर्थित होते हैं।<ref>{{cite web|title=Maven: The Complete Reference |url=http://www.sonatype.com/books/mvnref-book/reference/installation-sect-compare-ant-maven.html |publisher=Sonatype |access-date=11 April 2013 |url-status=dead |archive-url=https://web.archive.org/web/20130421060027/http://www.sonatype.com/books/mvnref-book/reference/installation-sect-compare-ant-maven.html |archive-date=21 April 2013 }}</ref><ref>[https://search.maven.org/ The Central Repository Search Engine]</ref>
अपाचे मावेन और अपाचे एंट के बीच मूल अंतर यह है कि अपाचे मावेन की डिज़ाइन सभी परियोजनाओं को एक निश्चित संरचना और समर्थित टास्क के रूप मे मानती है। उदाहरण के लिए स्रोत नियंत्रण से संसाधन प्राप्त करना, परियोजना को संकलित करना, इकाई परीक्षण इत्यादि। जबकि अधिकांश सॉफ्टवेयर परियोजना वास्तव में इन संचलनों का समर्थन करते हैं और वास्तव में यह एक अच्छी तरह से परिभाषित संरचना होती है। अपाचे मावेन के लिए आवश्यक है कि इस संरचना और संचालित कार्यान्वयन विवरण को पीओएम फ़ाइल में परिभाषित किया जाए। इस प्रकार अपाचे मावेन परियोजनाओं को परिभाषित करने के प्रकार कार्य विकास की सूची पर एक संस्करण रूप मे निर्भर करते है जो सामान्यतः सभी परियोजनाओं में समर्थित होते हैं।<ref>{{cite web|title=Maven: The Complete Reference |url=http://www.sonatype.com/books/mvnref-book/reference/installation-sect-compare-ant-maven.html |publisher=Sonatype |access-date=11 April 2013 |url-status=dead |archive-url=https://web.archive.org/web/20130421060027/http://www.sonatype.com/books/mvnref-book/reference/installation-sect-compare-ant-maven.html |archive-date=21 April 2013 }}</ref><ref>[https://search.maven.org/ The Central Repository Search Engine]</ref>


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


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


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


मावेन के साथ विकास का समर्थन करने वाले लोकप्रिय आईडीई के उदाहरणों में सम्मिलित हैं:
* एक्लिप्स सॉफ्टवेयर
 
* [[ NetBeans |नेटबीन]]
* ग्रहण (सॉफ्टवेयर)
* इंटेलीजे आइडिया (सॉफ्टवेयर)
* [[ NetBeans ]]
* इंटेलीजे आइडिया
* [[जेबिल्डर]]
* [[जेबिल्डर]]
* [[J डेवलपर]] (संस्करण 11.1.2)
* [[J डेवलपर|जी विकासक]] (संस्करण 11.1.2)
* [[मेरा ग्रहण]]
* [[मेरा ग्रहण|माईएक्लिप्स]]
* [[विजुअल स्टूडियो कोड]]
* [[विजुअल स्टूडियो कोड]]


ये ऐड-ऑन सीधे आईडीई के भीतर किसी परियोजना की निर्भरता के पूर्ण सेट को निर्धारित करने के लिए पीओएम को संपादित करने या पीओएम का उपयोग करने की क्षमता भी प्रदान करते हैं।
ये ऐड-ऑन आईडीई के भीतर किसी भी परियोजना की निर्भरता के पूर्ण संपादन को निर्धारित करने के लिए पीओएम को संपादित करने या पीओएम का उपयोग करने की क्षमता भी प्रदान करते हैं। जब आईडीई निष्पादन नहीं किया जाता है तब आईडीई की कुछ अंतर्निहित विशेषताएं समाप्त हो जाती हैं। उदाहरण के लिए एक्लिप्स के जेडीटी में संपादित होने के बाद एकल जावा स्रोत फ़ाइल को पुन: संकलित करने की क्षमता है। कई आईडीई अपाचे मावेन द्वारा निर्धारित किए गए फ़ोल्डरों के पदानुक्रम के अतिरिक्त परियोजनाओं के एक अनुमानित कार्य करते हैं। ये अपाचे मावेन का उपयोग करते समय आईडीई में एससीएम सिस्टम के उपयोग को जटिल बनाते हैं।<ref>{{cite web|url=https://maven.apache.org/eclipse-plugin.html |title=maven.apache.org/eclipse-plugin.html |url-status=dead |archive-url=https://web.archive.org/web/20150507014621/http://maven.apache.org/eclipse-plugin.html |archive-date=May 7, 2015 }}</ref><ref>{{cite web|url=http://www.jetbrains.com/idea/features/ant_maven.html#Maven_Integration|title=IntelliJ IDEA :: Features}}</ref><ref>{{cite web|url=http://wiki.netbeans.org/MavenBestPractices|title=MavenBestPractices - NetBeans Wiki}}</ref>
 
जब आईडीई अब निष्पादन नहीं करता है तो आईडीई की कुछ अंतर्निहित विशेषताएं समाप्त हो जाती हैं। उदाहरण के लिए, एक्लिप्स के जेडीटी में संपादित होने के बाद एकल जावा स्रोत फ़ाइल को पुन: संकलित करने की क्षमता है। कई आईडीई मावेन द्वारा पसंद किए गए फ़ोल्डरों के पदानुक्रम के बजाय परियोजनाओं के एक फ्लैट सेट के साथ कार्य करते हैं। यह अपाचे मावेन का उपयोग करते समय आईडीई में एससीएम सिस्टम के उपयोग को जटिल बनाता है।<ref>{{cite web|url=https://maven.apache.org/eclipse-plugin.html |title=maven.apache.org/eclipse-plugin.html |url-status=dead |archive-url=https://web.archive.org/web/20150507014621/http://maven.apache.org/eclipse-plugin.html |archive-date=May 7, 2015 }}</ref><ref>{{cite web|url=http://www.jetbrains.com/idea/features/ant_maven.html#Maven_Integration|title=IntelliJ IDEA :: Features}}</ref><ref>{{cite web|url=http://wiki.netbeans.org/MavenBestPractices|title=MavenBestPractices - NetBeans Wiki}}</ref>
== यह भी देखें ==
== यह भी देखें ==
{{Portal|Free and open-source software}}
{{Portal|Free and open-source software}}
* [[अपाचे कॉन्टिनम]]
* [[अपाचे कॉन्टिनम]]  
* [[अपाचे जेली]]
* [[अपाचे जेली]]
* [[हडसन (सॉफ्टवेयर)]]
* [[हडसन (सॉफ्टवेयर)]]

Revision as of 12:35, 19 July 2023

अपाचे मावेन
Developer(s)अपाचे सॉफ्टवेयर फाउंडेशन
Initial release13 July 2004; 20 years ago (2004-07-13)
Stable release
3.9.2 / 11 May 2023; 17 months ago (2023-05-11)[1]
Written inजावा
Typeउपकरण
Licenseअपाचे लाइसेंस 2.0
Websitemaven.apache.org

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

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

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

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

इतिहास

अपाचे मावेन केंद्रीय भंडार पर फ़ाइलों की संख्या तेजी से बढ़ी है

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

एल्गोरिथम

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

<project>
  <!-- model version is always 4.0.0 for Maven 2.x POMs -->
  <modelVersion>4.0.0</modelVersion>
  <!-- project coordinates, i.e. a group of values which uniquely identify this project -->
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>
  <!-- library dependencies -->
  <dependencies>
    <dependency>
      <!-- coordinates of the required library -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <!-- this dependency is only used for running and compiling tests -->
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

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

जावा परियोजना के लिए एक निर्देशिका संरचना अपाचे मावेन द्वारा स्वतः उत्पन्न होती है
डायरेक्टरी का नाम Purpose
project_home इसमें pom.xml और सभी directory सम्मिलित हैं।
src/main/java परियोजना के लिए डिलिवरेबल जावा स्रोतकोड सम्मिलित है।
src/main/resources इसमें परियोजना के लिए फ़ाइलें जैसे वितरण योग्य संसाधन सम्मिलित हैं।
src/test/java परियोजना के लिए परीक्षण जावा स्रोतकोड (उदाहरण के लिए JUnit या TestNG परीक्षण) सम्मिलित हैं।
src/test/resources परीक्षण के लिए आवश्यक संसाधन सम्मिलित हैं।

कमांड mvn package सभी जावा फ़ाइलों को कार्यान्वित करती है यदि कोई भी परीक्षण कार्यान्वित किया जाता है तो वितरण योग्य कोड और संसाधनों को target/my-app-1.0.jarपैकेज मे सम्मिलित करता है यह मानते हुए कि artifactId संस्करण 1.0 एप्लिकेशन है।

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

डिज़ाइन

परियोजना ऑब्जेक्ट मॉडल

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

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

प्लग-इन

अपाचे मावेन की अधिकांश कार्यक्षमता plugin में होती है। एक plugin लक्ष्यों का एक फंक्शन प्रदान करता है जिसे कमांड mvn [plugin-name]:[goal-name] का उपयोग करके निष्पादित किया जा सकता है। उदाहरण के लिए एक जावा परियोजना को mvn compiler:compile मे compilerplugin के कंपाइल-लक्ष्य के साथ संकलित किया जा सकता है।[9] निर्माण, परीक्षण, स्रोत नियंत्रण प्रबंधन, वेब सर्वर चलाने, एक्लिप्स परियोजना फ़ाइलें उत्पन्न करने के लिए अपाचे मावेन plugin होते हैं।[10] plugin को pom.xml फ़ाइल के <plugin> भाग में प्रस्तुत और परिवर्तित किया जाता है। प्रत्येक परियोजना में कुछ मूल plugin डिफ़ॉल्ट plugin केरूप से सम्मिलित होते हैं और उनमें डिफ़ॉल्ट सेटिंग्स होती हैं। हालाँकि किसी सॉफ़्टवेयर परियोजना के निर्माण, परीक्षण और पैकेजिंग के मूल निर्माण क्रम में प्रत्येक संबंधित लक्ष्य को मैन्युअल रूप से चलाने की आवश्यकता होती है:

  • mvn compiler:compile
  • mvn surefire:test
  • mvn jar:jar

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

बिल्ड-जीवनचक्र

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

  • मान्यता
  • बिल्ड-स्रोत
  • प्रसंस्करण-स्रोत
  • निर्मित-संसाधन
  • प्रसंस्करण-संसाधन
  • निष्पादन
  • प्रसंस्करण-परीक्षण-स्रोत
  • प्रसंस्करण-परीक्षण-संसाधन
  • परीक्षण-निष्पादन
  • परीक्षण
  • पैकेज
  • संस्थापन
  • प्रसारण

plugin द्वारा प्रदान किए गए लक्ष्य जीवनचक्र के विभिन्न चरणों से संबद्ध हो सकते हैं। उदाहरण के लिए डिफ़ॉल्ट रूप से लक्ष्य compiler:compile 'cocmpile' चरण से संबद्ध होता है, जबकि लक्ष्य surefire:test test चरण से संबद्ध होता है। जब mvn_test कमांड को निष्पादित किया जाता है, तो अपाचे मावेन test चरण तक और इसमें सम्मिलित प्रत्येक चरण से संबद्ध सभी लक्ष्यों को निष्पादित करता है। ऐसी स्थिति में अपाचे मावेन "प्रक्रिया-संसाधन" चरण से संबद्ध resources:resources लक्ष्य को निष्पादित करता है फिर compiler:compile को निष्पादित करता है और इसी प्रकार जब तक यह अंततः surefire:test लक्ष्य को नहीं निष्पादित करता है। अपाचे मावेन के पास परियोजना को clean और परियोजना स्थल तैयार करने के लिए मानक चरण भी हैं। यदि cleaning डिफ़ॉल्ट जीवनचक्र का भाग होती है, तो परियोजना के निर्माण के समय प्रत्येक बार उसे clean किया जाता है। यह स्पष्ट रूप से अवांछनीय है, इसलिए cleaning को अपना स्वयं का जीवनचक्र दिया गया है।

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

निर्भरता

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

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

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

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

अंतर-संचालनीयता

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

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

यह भी देखें

संदर्भ

  1. "Maven Release Notes – Maven 3.9.2". maven.apache.org.
  2. 2.0 2.1 "Index of /maven2/". Archived from the original on 2018-09-17. Retrieved 2009-04-15.
  3. Laugstol, Trygve. "मोजोहॉस नेटिव मावेन प्लगइन".
  4. "IBiblio Resolver | Apache Ivy™".
  5. "Reproducible/Verifiable Builds - Apache Maven - Apache Software Foundation". cwiki.apache.org.
  6. "जावा में प्रतिलिपि प्रस्तुत करने योग्य बिल्ड - डीज़ोन जावा". dzone.com.
  7. POM Reference
  8. Super POM
  9. Punzalan, Edwin. "Apache Maven Compiler Plugin – Introduction".
  10. Marbaise, Brett Porter Jason van Zyl Dennis Lundberg Olivier Lamy Benson Margulies Karl-Heinz. "Maven – Available Plugins".
  11. Amies, Alex; Zou P X; Wang Yi S (29 Oct 2011). "क्लाउड वर्चुअल मशीनों का स्वचालित विकास और प्रबंधन". IBM DeveloperWorks. IBM.
  12. Porter, Brett. "Maven – Introduction to the Build Lifecycle".
  13. "diet4j - put Java JARs on a diet, and load maven modules as needed".
  14. "Maven: The Complete Reference". Sonatype. Archived from the original on 21 April 2013. Retrieved 11 April 2013.
  15. The Central Repository Search Engine
  16. "maven.apache.org/eclipse-plugin.html". Archived from the original on May 7, 2015.
  17. "IntelliJ IDEA :: Features".
  18. "MavenBestPractices - NetBeans Wiki".


अग्रिम पठन


बाहरी संबंध