2011-05-05 9 views

उत्तर

681

मेवेन में एक स्नैपशॉट संस्करण वह रिलीज़ नहीं हुआ है।

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

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

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

+0

तो स्नैपशॉट हमेशा एक स्थिर निर्माण होता है, मुझे लगता है। और वह बिल्ड संख्या केवल कलाकृतियों के किस संस्करण का उपयोग करने के लिए संबंधित है और न कि एक अलग शाखा स्रोत कोड, क्या यह सही है? – amphibient

+29

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

+4

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

18

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

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

आपके पास एक ही कोड के आधार पर विभिन्न बिल्डों के लिए अलग-अलग कलाकृतियों हैं। जैसे आपके पास डिबगिंग और बिना किसी के एक हो सकता है। जावा 5.0 के लिए एक और जावा 6 के लिए एक। आमतौर पर एक ऐसा निर्माण करना आसान होता है जो आपको चाहिए। ;)

50

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

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

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

संस्करण के साथ कुछ मदद के लिए, Semantic Versioning specification देखें।

+0

के संदर्भ में:

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

+0

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

640

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

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

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

अब, यदि आपको 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 हो सकता है:

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

(settings.xml के मॉडल पाया जा सकता है here)

+1

ऐसा लगता है कि मैवेन को सभी 'स्नैपशॉट' संस्करणों को फिर से लोड करने के लिए कमांड लाइन स्विच का उपयोग करना संभव है: [mvn clean package -U' [maven tutorial] के अनुसार [http://www.tutorialspoint.com/maven/maven_snapshots। एचटीएम) –

+3

'-U' ध्वज के साथ सावधान। ऐसा नहीं हो सकता है कि आप [एमएनजी -4142] (http://jira.codehaus.org/browse/MNG-4142) के कारण क्या उम्मीद करते हैं। –

+3

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

3

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

<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> 

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

1

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

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

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

4

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

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

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

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

Maven

Maven जारी प्रक्रिया का एक उदाहरण

enter image description here

संबंधित मुद्दे