जवाबों:
मावेन में एक स्नैपशॉट संस्करण वह है जिसे जारी नहीं किया गया है।
विचार यह है कि है से पहले एक 1.0
रिलीज (या किसी अन्य विज्ञप्ति) किया जाता है, वहाँ एक से मौजूद है 1.0-SNAPSHOT
। वह संस्करण वही बन सकता है 1.0
। यह मूल रूप से " 1.0
विकास के तहत" है। यह एक वास्तविक रिलीज के करीब हो सकता है 1.0
, या बहुत दूर ( 0.9
उदाहरण के लिए रिलीज के ठीक बाद )।
"वास्तविक" संस्करण और स्नैपशॉट संस्करण के बीच का अंतर यह है कि स्नैपशॉट को अपडेट मिल सकता है। इसका मतलब है कि 1.0-SNAPSHOT
आज डाउनलोड करने वाला कल या कल डाउनलोड करने की तुलना में एक अलग फाइल दे सकता है।
आमतौर पर, स्नैपशॉट निर्भरता केवल विकास के दौरान मौजूद होनी चाहिए और कोई जारी संस्करण (यानी कोई गैर-स्नैपशॉट) स्नैपशॉट संस्करण पर निर्भरता नहीं होनी चाहिए।
1.0-DEVELOPMENT
", या " 1.0-INPROGRESS
" जैसे क्यों नहीं कह सकते , लोगों को गैर-स्पष्ट शब्दों का उपयोग क्यों करना पड़ता है
तीन अन्य उत्तर आपको एक -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
जा सकता है:
SNAPSHOT
संस्करण को स्थिर पुस्तकालयों के रूप में संभाला जाएगा।SNAPSHOT
संस्करणों को फिर से डाउनलोड करने के लिए मजबूर करने के लिए कमांड लाइन स्विच का उपयोग करना संभव है : मावेन ट्यूटोरियल केmvn clean package -U
अनुसार
-U
झंडे के साथ सावधान । यह MNG-4142 के कारण आप जो उम्मीद करते हैं वह नहीं कर सकते हैं ।
mvn install
अपने स्थानीय रेपो में 1.0-SNAPSHOT संस्करण का जार स्थापित करने के लिए दौड़ा । अगले दिन मैंने प्रोजेक्ट में बदलाव किया लेकिन संस्करण नहीं बदला - फिर जब mvn install
यह चल रहा था तो इसे मेरे स्थानीय रेपो में नहीं बदला। क्या वह अपेक्षित व्यवहार है? क्या मैं किसी संस्करण का फिर से उपयोग नहीं कर सकता और mvn install
उसमें बदलाव करने के बाद इसे अधिलेखित कर सकता हूं ?
"स्नैपशॉट" शब्द का अर्थ है कि बिल्ड एक निश्चित समय पर आपके कोड का स्नैपशॉट है।
इसका आमतौर पर मतलब है कि यह संस्करण अभी भी भारी विकास के अधीन है।
जब कोड तैयार होता है और इसे जारी करने का समय होता है, तो आप POM में सूचीबद्ध संस्करण को बदलना चाहेंगे। फिर "स्नैपशॉट" रखने के बजाय आप "1.0" जैसे लेबल का उपयोग करेंगे।
वर्जनिंग में कुछ मदद के लिए, सिमेंटिक वर्जनिंग स्पेसिफिकेशन देखें ।
एक "रिलीज़" एक संस्करण के लिए अंतिम बिल्ड है जो बदलता नहीं है।
एक "स्नैपशॉट" एक बिल्ड है जिसे किसी अन्य बिल्ड से बदला जा सकता है जिसका समान नाम है। इसका मतलब है कि निर्माण किसी भी समय बदल सकता है और अभी भी सक्रिय विकास के अधीन है।
आपके पास एक ही कोड के आधार पर विभिन्न बिल्ड के लिए अलग-अलग कलाकृतियां हैं। उदाहरण के लिए, आप डिबगिंग के साथ एक हो सकते हैं और एक बिना। जावा 5.0 के लिए एक और जावा 6 के लिए एक। आम तौर पर इसका सरलता से एक निर्माण होता है जो आपकी ज़रूरत का सब कुछ करता है। ;)
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>
मावेन रिलीज प्रक्रिया का एक उदाहरण
मैं शब्दावली के बारे में एक बिंदु बनाना चाहता हूं। मावेन के संदर्भ में "स्नैपशॉट" संस्करण क्या है, इसके बारे में अन्य उत्तरों ने अच्छी व्याख्या दी। लेकिन क्या यह पालन करता है कि गैर-स्नैपशॉट संस्करण को "रिलीज़" संस्करण कहा जाना चाहिए?
"रिलीज़" संस्करण के सिमेंटिक संस्करण विचार के बीच कुछ तनाव है, जो किसी भी संस्करण को प्रतीत होता है जिसमें कोई क्वालीफायर -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
: एक रिलीज़ संस्करण (जो एक स्थिर, गैर-स्नैपशॉट संस्करण है, जाहिर है)।यह एक स्नैपशॉट एक रिपॉजिटरी के लिए कैसा दिखता है और इस मामले में सक्षम नहीं है, जिसका अर्थ है कि इसमें संदर्भित रिपॉजिटरी स्थिर है और अपडेट की कोई आवश्यकता नहीं है।
<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) स्नैपशॉट बिल्ड 2) रिलीज बिल्ड
स्नैपशॉट बनाता है: स्नैपशॉट एक विशेष संस्करण है जो वर्तमान परिनियोजन प्रतिलिपि को एक नियमित संस्करण की तरह इंगित करता है, मावेन रिमोट रिपॉजिटरी में हर बिल्ड के लिए संस्करण की जांच करता है ताकि स्नैपशॉट बिल्ड कुछ भी न हो लेकिन विकास बनाता है।
रिलीज बिल्ड: रिलीज का मतलब है बिल्ड के लिए वर्जन पर स्नैपशॉट को हटाना, ये रेगुलर बिल्ड वर्जन हैं।
बस स्नैपशॉट का मतलब है कि यह वह संस्करण है जो स्थिर नहीं है।
जब संस्करण में स्नैपशॉट शामिल होता है जैसे कि 1.0.0 -SAPSHOT का अर्थ है कि यह स्थिर संस्करण नहीं है और निर्भरता को हल करने के लिए दूरस्थ रिपॉजिटरी की तलाश करें
एसडीएलसी के संदर्भ को समझने से स्नैपशॉट और रिलीज़ के बीच अंतर को समझने में मदद मिलेगी। देव प्रक्रिया डेवलपर्स के दौरान सभी एक बेसलाइन शाखा में अपनी सुविधाओं का योगदान करते हैं। कुछ बिंदु पर लीड को लगता है कि पर्याप्त सुविधाएँ जमा हो गई हैं, तो वह बेसलाइन शाखा से एक रिलीज शाखा काट देगा। इस समय बिंदु से पहले कोई भी निर्माण स्नैपशॉट हैं। इस बिंदु पर पोस्ट रिलीज़ होते हैं। ध्यान दिया जाए, तो रिलीज के परीक्षण के दौरान कोई भी दोष होने पर रिलीज बिल्ड उत्पादन में जाने से पहले बदल सकता है।
स्नैपशॉट का सीधा सा मतलब है कि आपके कॉन्फ़िगरेशन के आधार पर मावेन एक विशेष निर्भरता पर नवीनतम परिवर्तनों की जांच करेगा। स्नैपशॉट अस्थिर है क्योंकि यह विकास के अधीन है, लेकिन अगर किसी विशेष परियोजना पर एक नवीनतम परिवर्तन करने की आवश्यकता है, तो आपको अपने निर्भरता संस्करण को स्नैपशॉट संस्करण में कॉन्फ़िगर करना होगा। यह परिदृश्य कई उत्पादों के साथ बड़े संगठनों में होता है कि ये उत्पाद एक दूसरे से बहुत निकट से संबंधित हैं।
जैसा कि नाम से पता चलता है, स्नैपशॉट उस समय की परियोजना की स्थिति और उसकी निर्भरता को संदर्भित करता है। जब भी मावेन परियोजना का एक नया स्नैपशॉट पाता है, तो यह स्थानीय रिपॉजिटरी में प्रोजेक्ट की पुरानी .jar फ़ाइल को डाउनलोड और बदल देता है।
स्नैपशॉट संस्करण का उपयोग सक्रिय विकास के तहत परियोजनाओं के लिए किया जाता है। यदि आपकी परियोजना एक सॉफ़्टवेयर घटक पर निर्भर करती है जो सक्रिय विकास के अधीन है, तो आप स्नैपशॉट रिलीज़ पर निर्भर कर सकते हैं, और मावेन समय-समय पर एक बिल्ड चलाते समय एक रिपॉजिटरी से नवीनतम स्नैपशॉट डाउनलोड करने का प्रयास करेंगे।