Mvnw और mvnw.cmd फ़ाइलों का उद्देश्य क्या है?


257

जब मैंने एक स्प्रिंग बूट एप्लिकेशन बनाया, तो मैं प्रोजेक्ट की जड़ में देख सकता था mvnwऔर mvnw.cmdफाइल कर सकता था । इन दो फाइलों का उद्देश्य क्या है?

जवाबों:


345

ये फाइलें मावेन रैपर की हैं । यह ग्रैडल रैपर के समान ही काम करता है ।

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

mvnwफ़ाइल लिनक्स (बैश) के लिए है और mvnw.cmdWindows वातावरण के लिए है।


सभी आवश्यक Maven Wrapper फाइलें बनाने या अपडेट करने के लिए निम्नलिखित कमांड को निष्पादित करें:

mvn -N io.takari:maven:wrapper

मावेन के एक भिन्न संस्करण का उपयोग करने के लिए आप संस्करण को इस प्रकार निर्दिष्ट कर सकते हैं:

mvn -N io.takari:maven:wrapper -Dmaven=3.3.3

दोनों आदेशों पर maven की आवश्यकता होती है PATH(maven के लिए पथ को जोड़ने binके लिए Pathहै, तो आप पहले से ही mvnw अपनी परियोजना में है आप उपयोग कर सकते हैं प्रणाली वैरिएबल पर) ./mvnwके बजाय mvnआदेशों में।


आपका उत्तर बहुत मददगार है। मैं मावेन रैपर प्रलेखन की जांच करता हूं। मैं mvnमावेन ऑपरेशन के लिए कमांड का उपयोग कर रहा था, हालांकि मैं ./mvnwउसी उद्देश्य के लिए उपयोग कर सकता था ।
shaunthomas999

2
जवाब के लिए धन्यवाद। क्या आप यह समझा सकते हैं कि यह कब उत्पन्न होता है, क्या ऐसा है जब आप शुरू में एक परियोजना बनाते हैं? जब आप अपने पोम में बदलाव करते हैं, तो यह निर्भरता / प्लगइन्स को जोड़ने जैसे लाइन के साथ अपडेट हो जाएगा?
असेंक

1
और, क्या आपको mvnw.cmd फ़ाइलों को जोड़ना / प्रतिबद्ध करना चाहिए?
jpganz18

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

1
उत्तर के लिए बहुत धन्यवाद, यह बहुत उपयोगी है us क्या आप हमें मावन सेटिंग्स फ़ाइलों के पोर्टेबिलिटी के बारे में कुछ बता सकते हैं जब हम उस तरह से काम कर रहे हैं? सलुडोस और धन्यवाद फिर से।
डैनियल हर्नांडेज़

26

कमांड mvnwमैवेन का उपयोग करता है जो कि ~/.m2/wrapperपहले उपयोग पर डिफ़ॉल्ट रूप से डाउनलोड होता है ।

मावेन के साथ URL प्रत्येक परियोजना में निर्दिष्ट किया गया है .mvn/wrapper/maven-wrapper.properties:

distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

मावेन संस्करण को अपडेट करने या बदलने के लिए निम्न को लागू करें ( --non-recursiveमल्टी-मॉड्यूल प्रोजेक्ट्स के बारे में याद रखें ):

./mvnw io.takari:maven:wrapper -Dmaven=3.3.9 

या बस .mvn/wrapper/maven-wrapper.propertiesमैन्युअल रूप से संशोधित करें ।

मावेन का उपयोग करके खरोंच से आवरण उत्पन्न करने के लिए (आपको इसे पहले से ही PATHचलाने की आवश्यकता है:

mvn io.takari:maven:wrapper -Dmaven=3.3.9 

5

Maven आवरण परियोजनाओं Maven के (या उन है कि सभी पर Maven स्थापित करने के लिए नहीं करना चाहते हैं के लिए) एक विशिष्ट संस्करण की आवश्यकता है कि के लिए एक शानदार विकल्प है। ऑपरेटिंग सिस्टम में इसके कई संस्करण स्थापित करने के बजाय, हम केवल प्रोजेक्ट-विशिष्ट आवरण स्क्रिप्ट का उपयोग कर सकते हैं।

mvnw: यह एक निष्पादन योग्य यूनिक्स शैल स्क्रिप्ट है जिसका उपयोग पूरी तरह से स्थापित मावेन के स्थान पर किया जाता है

mvnw.cmd : यह विंडोज़ वातावरण के लिए है


बक्सों का इस्तेमाल करें

रैपर को विभिन्न ऑपरेटिंग सिस्टम जैसे:

  • लिनक्स
  • OSX
  • खिड़कियाँ
  • सोलारिस

उसके बाद, हम यूनिक्स प्रणाली के लिए इस तरह से अपने लक्ष्य चला सकते हैं:

./mvnw clean install

और बैच के लिए निम्न आदेश:

./mvnw.cmd clean install

यदि हमारे पास रैपर गुणों में निर्दिष्ट मावेन नहीं है, तो इसे $USER_HOME/.m2/wrapper/distsसिस्टम के फ़ोल्डर में डाउनलोड और इंस्टॉल किया जाएगा ।


मावेन रैपर प्लगइन

एक साधारण स्प्रिंग बूट परियोजना में ऑटो इंस्टॉलेशन बनाने के लिए मावेन रैपर प्लगइन

सबसे पहले, हमें प्रोजेक्ट के मुख्य फ़ोल्डर में जाने और इस कमांड को चलाने की आवश्यकता है:

mvn -N io.takari:maven:wrapper

हम मावेन के संस्करण को भी निर्दिष्ट कर सकते हैं:

mvn -N io.takari:maven:wrapper -Dmaven=3.5.2

विकल्प -N का अर्थ है-गन-पुनरावर्ती ताकि आवरण केवल वर्तमान निर्देशिका की मुख्य परियोजना पर लागू हो, किसी भी सबमॉड्यूल में नहीं।


2

अब तक सबसे अच्छा विकल्प एक बिल्डर उपकरण के रूप में मावेन कंटेनर का उपयोग करना होगा। mvn.shइस तरह से एक स्क्रिप्ट पर्याप्त होगी:

#!/bin/bash
docker run --rm -ti \
 -v $(pwd):/opt/app \
 -w /opt/app \
 -e TERM=xterm \
 -v $HOME/.m2:/root/.m2 \
 maven mvn "$@"

7
यह ओपी प्रश्न का उत्तर नहीं देता है, यह सिर्फ एक विकल्प का सुझाव देता है
ahmedjaad

2
मावेन रैपर का बहुत मूल विचार इस परियोजना के लिए मावेन के सही संस्करण की घोषणा करना है। और एक बोनस मैन्युअल रूप से मावेन स्थापित करने की आवश्यकता से बच रहा है। आपका दृष्टिकोण न केवल संस्करण की समस्या को हल करने के लिए याद करता है, बल्कि एक और स्थानीय रूप से स्थापित टूल की आवश्यकता होती है।
मैक्स

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

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

1
(जारी) ओल्ड-स्कूल जेनकिंस सेटअप और मानसिकता इस तरह की बात को जन्म देती है। आधुनिक सीआई / सीडी उपकरण इसके विपरीत करते हैं: आप बस एक निर्माण कंटेनर चुनते हैं। लेकिन यह महज मेरी राय है।
आंद्रे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.