वास्तव में मावेन स्नैपशॉट क्या है और हमें इसकी आवश्यकता क्यों है?


850

मैं मावेन स्नैपशॉट के अर्थ के बारे में थोड़ा भ्रमित हूं और हम एक का निर्माण क्यों करते हैं?

जवाबों:


1013

मावेन में एक स्नैपशॉट संस्करण वह है जिसे जारी नहीं किया गया है।

विचार यह है कि है से पहले एक 1.0रिलीज (या किसी अन्य विज्ञप्ति) किया जाता है, वहाँ एक से मौजूद है 1.0-SNAPSHOT। वह संस्करण वही बन सकता है 1.0 । यह मूल रूप से " 1.0विकास के तहत" है। यह एक वास्तविक रिलीज के करीब हो सकता है 1.0, या बहुत दूर ( 0.9उदाहरण के लिए रिलीज के ठीक बाद )।

"वास्तविक" संस्करण और स्नैपशॉट संस्करण के बीच का अंतर यह है कि स्नैपशॉट को अपडेट मिल सकता है। इसका मतलब है कि 1.0-SNAPSHOTआज डाउनलोड करने वाला कल या कल डाउनलोड करने की तुलना में एक अलग फाइल दे सकता है।

आमतौर पर, स्नैपशॉट निर्भरता केवल विकास के दौरान मौजूद होनी चाहिए और कोई जारी संस्करण (यानी कोई गैर-स्नैपशॉट) स्नैपशॉट संस्करण पर निर्भरता नहीं होनी चाहिए।


67
@amphibient: नहीं, स्नैपशॉट आवश्यक रूप से अधिक स्थिर नहीं है: यह सिर्फ नवीनतम बिल्ड है। स्नैपशॉट वास्तविक रिलीज़ से पहले है, यह इसके बाद नहीं आता है। दरअसल, संस्करण संख्या आमतौर पर शाखाओं को संदर्भित नहीं करती है।
एवांडेर्सन

9
@avandeursen स्नैपशॉट में आपके द्वारा दावा किए जाने वाले शब्दार्थ नहीं हैं। आपके पास "मास्टर-स्नैपशॉट" हो सकता है और बाद में 1.0 रिलीज कर सकता है। यह "FutureVersion-SNAPSHOT" होना जरूरी नहीं है, और न ही कभी भी रिलीज से पहले। बाकी सब कुछ सही है - यह एक चलती लक्ष्य का एक अस्थिर संदर्भ है और इसे एक दोहराने योग्य निर्माण करने के लिए भरोसा नहीं किया जा सकता है।
स्कॉट केरी

3
धन्यवाद @ScottCarey "सामान्य रूप से पूर्ववर्ती" शायद वास्तव में अधिक सटीक होगा, क्योंकि कोई गारंटी भी नहीं है कि "चलती लक्ष्य" अंततः मौजूद होगा।
एवांडेर्सन

1
@ जय: नहीं, जहां तक ​​मुझे पता है कि एक विशिष्ट स्नैपशॉट को स्पष्ट रूप से संदर्भित करने का कोई तरीका नहीं है, वे डिजाइन द्वारा गैर-पता योग्य / विनिमेय हैं। यदि आपको ठीक-ठीक संस्करण की आवश्यकता है, तो आपको केवल विशिष्ट संस्करण स्ट्रिंग्स (-RC1, -RC2 या ऐसा कुछ) के साथ रिलीज़ उम्मीदवारों को जारी करना चाहिए।
जोकिम सोउर

14
वे इसे " 1.0-DEVELOPMENT", या " 1.0-INPROGRESS" जैसे क्यों नहीं कह सकते , लोगों को गैर-स्पष्ट शब्दों का उपयोग क्यों करना पड़ता है
uh_big_mike_boi

791

तीन अन्य उत्तर आपको एक -SNAPSHOTसंस्करण क्या है की एक अच्छी दृष्टि प्रदान करते हैं । मैं सिर्फ मावेन के व्यवहार के बारे में कुछ जानकारी जोड़ना चाहता था जब यह एक SNAPSHOTनिर्भरता पाता है ।

जब आप कोई एप्लिकेशन बनाते हैं, तो मावेन स्थानीय भंडार में निर्भरता की खोज करेगा । यदि कोई स्थिर संस्करण वहां नहीं मिलता है, तो यह इस निर्भरता को प्राप्त करने के लिए दूरस्थ रिपॉजिटरी ( settings.xmlया में परिभाषित pom.xml) खोज करेगा । फिर, इसे अगले भंडार के लिए उपलब्ध कराने के लिए, इसे स्थानीय भंडार में कॉपी किया जाएगा।

उदाहरण के लिए, एक foo-1.0.jarपुस्तकालय को एक स्थिर संस्करण माना जाता है , और यदि मावेन इसे स्थानीय भंडार में पाता है, तो यह वर्तमान निर्माण के लिए इसका उपयोग करेगा।

अब, यदि आपको एक foo-1.0-SNAPSHOT.jarपुस्तकालय की आवश्यकता है, तो मावेन को पता चल जाएगा कि यह संस्करण स्थिर नहीं है और परिवर्तनों के अधीन है। यही कारण है कि मावेन रिमोट रिपॉजिटरी में एक नया संस्करण खोजने की कोशिश करेंगे, भले ही इस लाइब्रेरी का एक संस्करण स्थानीय रिपॉजिटरी पर पाया जाए। हालाँकि, यह जाँच प्रति दिन केवल एक बार की जाती है। इसका मतलब यह है कि यदि आपके पास foo-1.0-20110506.110000-1.jar(यानी यह लाइब्रेरी 2011/05/06 पर 11:00:00 बजे उत्पन्न हुई है) तो आपके स्थानीय भंडार में, और यदि आप उसी दिन फिर से मावेन का निर्माण करते हैं, तो मावेन रिपॉजिटरी की जांच नहीं करेंगे एक नए संस्करण के लिए।

Maven आपको अपनी रिपॉजिटरी परिभाषा में इस अपडेट पॉलिसी को बदलने का एक तरीका प्रदान करता है:

<repository>
    <id>foo-repository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

कहा XXXजा सकता है:

  • हमेशा : मावेन हर बिल्ड पर एक नए संस्करण की जांच करेगा;
  • दैनिक , डिफ़ॉल्ट मान;
  • अंतराल: XXX : मिनटों में एक अंतराल (XXX)
  • कभी नहीं : मावेन एक और संस्करण को पुनः प्राप्त करने की कोशिश नहीं करेगा। यह केवल तभी होगा जब यह स्थानीय रूप से मौजूद न हो। कॉन्फ़िगरेशन के साथ, SNAPSHOTसंस्करण को स्थिर पुस्तकालयों के रूप में संभाला जाएगा।

(सेटिंग का मॉडल। xml यहां पाया जा सकता है)


2
ऐसा लगता है कि सभी SNAPSHOTसंस्करणों को फिर से डाउनलोड करने के लिए मजबूर करने के लिए कमांड लाइन स्विच का उपयोग करना संभव है : मावेन ट्यूटोरियल केmvn clean package -U अनुसार
दिमित्री के

3
-Uझंडे के साथ सावधान । यह MNG-4142 के कारण आप जो उम्मीद करते हैं वह नहीं कर सकते हैं ।
केविन क्रॉस

3
यह भी ध्यान देने योग्य है कि जब आप रिलीज़ संस्करण बनाने के लिए आते हैं तो अच्छे अभ्यास के लिए आपको किसी स्नैपशॉट निर्भरता का उपयोग करने की आवश्यकता नहीं होती है, और यदि स्नैपशॉट निर्भरताएँ मौजूद हैं, तो वास्तव में मेवेन रिलीज़ प्लगिन विफल हो जाएगा।
RCross

2
मैं mvn installअपने स्थानीय रेपो में 1.0-SNAPSHOT संस्करण का जार स्थापित करने के लिए दौड़ा । अगले दिन मैंने प्रोजेक्ट में बदलाव किया लेकिन संस्करण नहीं बदला - फिर जब mvn installयह चल रहा था तो इसे मेरे स्थानीय रेपो में नहीं बदला। क्या वह अपेक्षित व्यवहार है? क्या मैं किसी संस्करण का फिर से उपयोग नहीं कर सकता और mvn installउसमें बदलाव करने के बाद इसे अधिलेखित कर सकता हूं ?
डॉन चेडल

1
@mmcrae AFAIK को अपडेट किया जाना चाहिए। स्थानीय स्नैपशॉट जार को अपडेट करने वाले लक्ष्य क्या स्थापित करते हैं। क्या आपने कुछ और खोजा है?
जॉनी

73

"स्नैपशॉट" शब्द का अर्थ है कि बिल्ड एक निश्चित समय पर आपके कोड का स्नैपशॉट है।

इसका आमतौर पर मतलब है कि यह संस्करण अभी भी भारी विकास के अधीन है।

जब कोड तैयार होता है और इसे जारी करने का समय होता है, तो आप POM में सूचीबद्ध संस्करण को बदलना चाहेंगे। फिर "स्नैपशॉट" रखने के बजाय आप "1.0" जैसे लेबल का उपयोग करेंगे।

वर्जनिंग में कुछ मदद के लिए, सिमेंटिक वर्जनिंग स्पेसिफिकेशन देखें


सिमेंटिक वर्जनिंग के संदर्भ में , -SNAPSHOT रिलीज़ पूर्व-रिलीज़ होगी: " प्री-रिलीज़ संस्करण इंगित करता है कि संस्करण अस्थिर है और इसके संबंधित सामान्य संस्करण द्वारा निरूपित के रूप में इच्छित संगतता आवश्यकताओं को पूरा नहीं कर सकता है। उदाहरण: -। -ल्पा, 1.0.0-अल्फ़ा.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92। "
एवांडेर्सन

3
यह मुझे ऐसा लगता है जैसे "स्नैपशॉट" एक विशिष्ट समय में "आपके कोड का स्नैपशॉट" नहीं है, बल्कि "उपलब्ध कोड का नवीनतम निर्माण" है। अगर यह HTTP होता, तो यह वह झंडा होता जो कहता है, "HEAD करने से परेशान न हों, वैसे भी सर्वर पर जो कुछ भी है उसे प्राप्त करें।" वास्तव में, यह एक निश्चित समय में "विपरीत कोड" है।
लिलबर्डी

"भारी" विकास क्या है?
जोकर

1
@ जोकर "भारी" है, जब बहुत सारी चीजें बदल रही हैं (नई सुविधाएँ, रिफैक्टिंग आदि)
रोबर्ट

28

एक "रिलीज़" एक संस्करण के लिए अंतिम बिल्ड है जो बदलता नहीं है।

एक "स्नैपशॉट" एक बिल्ड है जिसे किसी अन्य बिल्ड से बदला जा सकता है जिसका समान नाम है। इसका मतलब है कि निर्माण किसी भी समय बदल सकता है और अभी भी सक्रिय विकास के अधीन है।

आपके पास एक ही कोड के आधार पर विभिन्न बिल्ड के लिए अलग-अलग कलाकृतियां हैं। उदाहरण के लिए, आप डिबगिंग के साथ एक हो सकते हैं और एक बिना। जावा 5.0 के लिए एक और जावा 6 के लिए एक। आम तौर पर इसका सरलता से एक निर्माण होता है जो आपकी ज़रूरत का सब कुछ करता है। ;)


21

Maven संस्करणों में एक स्ट्रिंग शाब्दिक "SNAPSHOT" हो सकता है यह दर्शाता है कि एक परियोजना वर्तमान में सक्रिय विकास के तहत है।

उदाहरण के लिए, यदि आपकी परियोजना में "1.0-SNAPSHOT" का संस्करण है और आप इस परियोजना की कलाकृतियों को मावेन रिपॉजिटरी में तैनात करते हैं, तो मावेन इस संस्करण को "1.0-20080207-230803-1" तक विस्तारित करेगा यदि आप 11 पर एक रिलीज तैनात करना चाहते थे : On फरवरी, ०० 7th यूटीसी पर ०, पीएम। दूसरे शब्दों में, जब आप एक स्नैपशॉट तैनात करते हैं, तो आप एक सॉफ़्टवेयर घटक की रिलीज़ नहीं कर रहे हैं; आप किसी विशिष्ट समय पर किसी घटक का स्नैपशॉट जारी कर रहे हैं।

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

उदाहरण के लिए, निम्न निर्भरता हमेशा वसंत के नवीनतम 1.8 विकास JAR को डाउनलोड करेगी:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>1.8-SNAPSHOT”</version>
    </dependency>

Maven

मावेन रिलीज प्रक्रिया का एक उदाहरण

यहां छवि विवरण दर्ज करें


6

मैं शब्दावली के बारे में एक बिंदु बनाना चाहता हूं। मावेन के संदर्भ में "स्नैपशॉट" संस्करण क्या है, इसके बारे में अन्य उत्तरों ने अच्छी व्याख्या दी। लेकिन क्या यह पालन करता है कि गैर-स्नैपशॉट संस्करण को "रिलीज़" संस्करण कहा जाना चाहिए?

"रिलीज़" संस्करण के सिमेंटिक संस्करण विचार के बीच कुछ तनाव है, जो किसी भी संस्करण को प्रतीत होता है जिसमें कोई क्वालीफायर -SNAPSHOTनहीं होता है, लेकिन जैसे कि एक क्वालीफायर भी नहीं होता है -beta.4; और मावेन के "रिलीज़" संस्करण का विचार, जो केवल अनुपस्थिति को शामिल करता है -SNAPSHOT

दूसरे शब्दों में, "रिलीज़" का अर्थ "हम इसे मावेन सेंट्रल को जारी कर सकते हैं" या "सॉफ्टवेयर जनता के लिए अपनी अंतिम रिलीज में है" का अर्थ अस्पष्टता है। -beta.4यदि हम इसे जनता के लिए जारी करते हैं तो हम "रिलीज़" संस्करण पर विचार कर सकते हैं , लेकिन यह "अंतिम रिलीज़" नहीं है। सिमेंटिक संस्करण स्पष्ट रूप से कहता है कि ऐसा कुछ -beta.4"पूर्व-रिलीज़" संस्करण है, इसलिए इसे बिना "रिलीज़" संस्करण कहा जाना भी समझ में नहीं आएगा -SNAPSHOT। वास्तव में परिभाषा के अनुसार भी -rc.5एक रिलीज़ उम्मीदवार है , वास्तविक रिलीज़ नहीं, भले ही हम परीक्षण के लिए सार्वजनिक उपयोग की अनुमति दे सकते हैं।

इसलिए मैवेन के बावजूद, मेरी राय में यह केवल "रिलीज़" संस्करण को कॉल करने के लिए अधिक उपयुक्त लगता है, जिसमें कोई भी क्वालीफायर नहीं है, यहां तक ​​कि नहीं -beta.4। शायद मावेन नॉन-स्नैपशॉट संस्करण के लिए एक बेहतर नाम एक "स्थिर" संस्करण होगा ( दूसरे उत्तर से प्रेरित )। इस प्रकार हमारे पास होगा:

  • 1.2.3-beta.4-SNAPSHOT: पूर्व-रिलीज़ संस्करण का एक स्नैपशॉट संस्करण।
  • 1.2.3-SNAPSHOT: रिलीज़ संस्करण का स्नैपशॉट संस्करण।
  • 1.2.3-beta.4: पूर्व-रिलीज़ संस्करण का एक स्थिर संस्करण।
  • 1.2.3: एक रिलीज़ संस्करण (जो एक स्थिर, गैर-स्नैपशॉट संस्करण है, जाहिर है)।

क्या आपके पास इस बारे में कोई जानकारी है कि निर्माण मेटाडाटा या पूर्व-रिलीज़ नामकरण सम्मेलनों के साथ कैसे सौदा होता है? मेरा मतलब है, हम सभी जानते हैं कि अल्फा बीटा से आगे निकलता है, लेकिन क्या मावेन को पता है? भले ही इसे स्थिर रिलीज के रूप में 1.2.3-बीटा.4 लगता है, लेकिन क्या यह कम से कम पता है कि 1.2.3 यह है?
DGoiko

5

यह एक स्नैपशॉट एक रिपॉजिटरी के लिए कैसा दिखता है और इस मामले में सक्षम नहीं है, जिसका अर्थ है कि इसमें संदर्भित रिपॉजिटरी स्थिर है और अपडेट की कोई आवश्यकता नहीं है।

<project>
    ...
    <repositories>
        <repository>
            <id>lds-main</id>
            <name>LDS Main Repo</name>
            <url>http://code.lds.org/nexus/content/groups/main-repo</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

एक और मामला इसके लिए होगा:

<snapshots>
        <enabled>true</enabled>
</snapshots>

जिसका अर्थ है कि मावेन इस भंडार के लिए अद्यतन की तलाश करेगा। आप टैग के साथ अपडेट के लिए एक अंतराल भी निर्दिष्ट कर सकते हैं।


5

आमतौर पर मावेन में हमारे पास दो प्रकार के बिल्ड होते हैं 1) स्नैपशॉट बिल्ड 2) रिलीज बिल्ड

  1. स्नैपशॉट बनाता है: स्नैपशॉट एक विशेष संस्करण है जो वर्तमान परिनियोजन प्रतिलिपि को एक नियमित संस्करण की तरह इंगित करता है, मावेन रिमोट रिपॉजिटरी में हर बिल्ड के लिए संस्करण की जांच करता है ताकि स्नैपशॉट बिल्ड कुछ भी न हो लेकिन विकास बनाता है।

  2. रिलीज बिल्ड: रिलीज का मतलब है बिल्ड के लिए वर्जन पर स्नैपशॉट को हटाना, ये रेगुलर बिल्ड वर्जन हैं।


3

बस स्नैपशॉट का मतलब है कि यह वह संस्करण है जो स्थिर नहीं है।

जब संस्करण में स्नैपशॉट शामिल होता है जैसे कि 1.0.0 -SAPSHOT का अर्थ है कि यह स्थिर संस्करण नहीं है और निर्भरता को हल करने के लिए दूरस्थ रिपॉजिटरी की तलाश करें


1

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


1

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


0

जैसा कि नाम से पता चलता है, स्नैपशॉट उस समय की परियोजना की स्थिति और उसकी निर्भरता को संदर्भित करता है। जब भी मावेन परियोजना का एक नया स्नैपशॉट पाता है, तो यह स्थानीय रिपॉजिटरी में प्रोजेक्ट की पुरानी .jar फ़ाइल को डाउनलोड और बदल देता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.