एक ही उपकरण, अलग भाषा?
जावा के लिए मावेन सबसे लोकप्रिय बिल्ड और डिपेंडेंसी रेजोल्यूशन टूल है, जैसे JS के लिए NPM है। लेकिन यह एक अलग भाषा के लिए सिर्फ एक ही उपकरण नहीं है। जावा और जेएस बिल्ड के बीच स्पष्ट रूप से भारी अंतर हैं, और ये अंतर मावेन के संचालन के तरीके में सीधे दिखाई देते हैं। उदाहरण के लिए, जबकि कई जेएस उपकरण कुछ भारी उठाने के लिए गिट पर भरोसा करते हैं, मावेन कस्टम फाइलसिस्टम-आधारित मावेन रिपॉजिटरी के साथ काम करता है, क्योंकि मावेन गित से पहले हैं और द्विआधारी कलाकृतियों को संभालने की जरूरत है, जो कि ऐतिहासिक रूप से अच्छी तरह से संभाल लेंगे। मावेन में स्रोतों और बायनेरिज़ के बीच एक स्पष्ट अलगाव है, जबकि वे अक्सर जेएस दुनिया में एक ही चीज हैं।
मवन मूल बातें
अपने शुद्धतम रूप में मावेन एक घोषणात्मक मॉडल का अनुसरण करता है, जहां pom.xml
(इसी तरह package.json
) बिल्ड के विभिन्न गुणों को परिभाषित करता है, लेकिन इसमें कोई स्क्रिप्ट नहीं होती है। नुकसान यह है कि स्क्रिप्ट का उपयोग किए बिना बिल्ड के कुछ पहलुओं को ठीक करने के लिए एक चुनौती हो सकती है क्योंकि आपको प्लगइन्स पर भरोसा करना होगा। फायदा यह है कि अन्य बिल्ड को समझना आसान हो सकता है pom.xml
, क्योंकि वे आमतौर पर बहुत अधिक अनुकूलन के बिना एक ही दृष्टिकोण का पालन करते हैं। ग्रैडल एक लोकप्रिय ग्रूवी-आधारित टूल है जो मावेन मानकों और सम्मेलनों के शीर्ष पर बनाया गया है, और इसे विशेष रूप से pom.xml
इस "नो स्क्रिप्ट" बाधा को सरल बनाने और तोड़ने के लिए डिज़ाइन किया गया है ।
अपनी निर्भरताओं को संदर्भित करना
इसी तरह package.json
, आप pom.xml
सीधे अपनी निर्भरता के साथ काम नहीं करते हैं, बल्कि निर्भरता निर्देशांक को परिभाषित करते हैं और अपने बिल्ड टूल को बाकी को संभालने देते हैं। मावेन में इन निर्देशांक का मूल रूप GAV (groupId, विरूपण साक्ष्य, संस्करण) है।
फ्लैट निर्भरता पेड़?
अन्य उत्तर में टिप्पणियों के आधार पर, मावेन "फ्लैट निर्भरता पेड़" प्रदान करता है, न कि "नेस्टेड डिपेंडेंसी ट्री" जिसे एनपीएम डिफ़ॉल्ट रूप से प्रदान करता है। मावेन एक ही निर्भरता के कई संस्करणों की अनुमति नहीं देता है। यदि ऐसा होता है कि विभिन्न संस्करणों का अनुरोध किया जाता है, तो मावेन एकल संस्करण चुनने के लिए निर्भरता संकल्प का उपयोग करता है । इसका मतलब यह है कि कभी-कभी आपकी संक्रामक निर्भरता को उनकी आवश्यकता के अनुसार एक अलग संस्करण मिलेगा, लेकिन इसके प्रबंधन के तरीके हैं। हालाँकि, यह सीमा जावा से आती है, न कि मावेन, जैसा कि (सामान्य रूप से) जावा में एक क्लास लोडर केवल एकल वर्ग परिभाषा तक पहुंच प्रदान करेगा, भले ही क्लासपैथ पर कई परिभाषाएं मिलें। चूंकि जावा इसे संभालने में विशेष रूप से अच्छा नहीं है, मावेन पहली बार में इस परिदृश्य से बचने की कोशिश करता है।
नोट: npm v3 के बाद से निर्भरता चपटी है। वैकल्पिक पैकेज प्रबंधक यार्न भी यही करता है।
परिपक्वता
इसके अलावा, मावेन एनपीएम की तुलना में काफी पुराना है, एक बड़ा उपयोगकर्ता आधार, कस्टम प्लगइन्स की बड़ी संख्या है, और अब तक शायद समग्र रूप से अधिक परिपक्व माना जा सकता है। कभी-कभी मावेन का उपयोग गैर-जावा या यहां तक कि पॉलीग्लॉट परियोजनाओं के लिए किया जाता है, क्योंकि अन्य भाषाओं या विशिष्ट वातावरणों को संभालने के लिए प्लगइन्स हैं, जैसे कि एंड्रॉइड। ऐसे प्लग हैं जो मावेन और अन्य बिल्ड टूल को पुल करते हैं, जैसे कि फ्रंटेंड- मावेन -प्लगइन जो वास्तव में कई जेएस बिल्ड टूल को हैंडल करते हैं।