नोट:
यह उत्तर केवल 2 Maven पर लागू होता है! 6 साल पहले उल्लिखित LATEST
और RELEASE
metaversions have been dropped in Maven 3 "for the sake of reproducible builds"। कृपया इस Maven 3 compliant solution देखें।
आप हमेशा नवीनतम संस्करण का उपयोग करना चाहते हैं, तो Maven दो कीवर्ड आप संस्करण पर्वतमाला के लिए एक विकल्प के रूप में उपयोग कर सकते है। आपको इन विकल्पों का ध्यान देखभाल के साथ उपयोग करना चाहिए क्योंकि आप अब प्लगइन/निर्भरताओं के नियंत्रण में नहीं हैं।
जब आप प्लगइन या निर्भरता पर निर्भर करते हैं, तो आप नवीनतम या रिलीज के संस्करण मान का उपयोग कर सकते हैं। नवीनतम एक विशेष आर्टिफैक्ट के नवीनतम रिलीज़ या स्नैपशॉट संस्करण को संदर्भित करता है, जो हाल ही में एक विशेष भंडार में तैनात आर्टिफैक्ट है। रिलीज में भंडार में अंतिम गैर स्नैपशॉट रिलीज को संदर्भित करता है। आम तौर पर, यह सॉफ़्टवेयर डिज़ाइन करने का सबसे अच्छा अभ्यास नहीं है जो एक आर्टिफैक्ट के गैर-विशिष्ट संस्करण पर निर्भर करता है। यदि आप सॉफ़्टवेयर विकसित कर रहे हैं, तो आप एक सुविधा के रूप में रिलीज या नवीनतम का उपयोग करना चाहेंगे ताकि आपको तृतीय-पक्ष लाइब्रेरी की एक नई रिलीज़ जारी होने पर संस्करण संख्या अपडेट करने की आवश्यकता न हो। जब आप सॉफ़्टवेयर जारी करते हैं, तो आपको हमेशा यह सुनिश्चित करना चाहिए कि आपकी परियोजना आपके निर्माण की संभावनाओं को कम करने के लिए विशिष्ट संस्करणों पर निर्भर करती है या आपके प्रोजेक्ट को आपके नियंत्रण में नहीं सॉफ़्टवेयर रिलीज़ से प्रभावित किया जा रहा है। सावधानी के साथ नवीनतम और रिलीज का उपयोग करें, अगर बिलकुल भी।
अधिक जानकारी के लिए POM Syntax section of the Maven book देखें।
- एक वर्ग कोष्ठक (
[
& ]
) का अर्थ है "बंद" (सम्मिलित): या Dependency Version Ranges, जहां पर इस दस्तावेज़ नहीं देख।
- एक कंस्ट्रैसिस (
(
& )
) का अर्थ है "खुला" (अनन्य)।
यहां विभिन्न विकल्पों को चित्रित करने का एक उदाहरण दिया गया है। Maven भंडार में, com.foo:my-foo निम्नलिखित मेटाडाटा है:
<?xml version="1.0" encoding="UTF-8"?><metadata>
<groupId>com.foo</groupId>
<artifactId>my-foo</artifactId>
<version>2.0.0</version>
<versioning>
<release>1.1.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
<version>1.1</version>
<version>1.1.1</version>
<version>2.0.0</version>
</versions>
<lastUpdated>20090722140000</lastUpdated>
</versioning>
</metadata>
कि विरूपण साक्ष्य पर निर्भरता की आवश्यकता है, आप निम्नलिखित विकल्पों (अन्य version ranges निश्चित रूप से निर्दिष्ट किया जा सकता है, बस दिखा प्रासंगिक लोगों यहाँ):
एक सटीक संस्करण (घोषित हमेशा 1.0.1 हो जाएगी):
<version>[1.0.1]</version>
एक स्पष्ट संस्करण (घोषित हमेशा 1.0.1 को हल करेंगे जब तक कि एक टक्कर होती है, जब Maven होगा एक मिलान संस्करण का चयन करें):
<version>1.0.1</version>
सभी 1.x के लिए एक संस्करण सीमा घोषित (वर्तमान में 1.1.1 हो जाएगी):
<version>[1.0.0,2.0.0)</version>
एक ओपन एंडेड संस्करण सीमा घोषित (2.0.0 हो जाएगी):
<version>[1.0.0,)</version>
संस्करण घोषित रूप में नवीनतम (2.0.0 करने के लिए हल होगा) (Maven 3.x से हटा)
<version>LATEST</version>
विज्ञप्ति के रूप में संस्करण घोषित (1.1.1 करने के लिए हल होगा) (Maven 3.x से हटा):
<version>RELEASE</version>
ध्यान दें कि डिफ़ॉल्ट रूप से अपनी खुद की तैनाती Maven मेटाडाटा में "नवीनतम" प्रविष्टि अपडेट करेगा, लेकिन "रिलीज" एंट्री अपडेट करने के लिए, आपको Maven super POM से "रिलीज-प्रोफाइल" सक्रिय करने की आवश्यकता है। आप या तो "-Prelease प्रोफ़ाइल" के साथ ऐसा कर सकते हैं या "-DperformRelease = सच"
यह बल के लायक है कि किसी भी दृष्टिकोण है कि Maven निर्भरता संस्करणों (नवीनतम, रिहाई, और संस्करण पर्वतमाला) कर सकते हैं लेने के लिए अनुमति देता है समय के मुद्दों को बनाने के लिए आपको छोड़ दें, क्योंकि बाद के संस्करणों में अलग-अलग व्यवहार हो सकते हैं (उदाहरण के लिए निर्भरता प्लगइन ने पहले भ्रमित परिणामों के साथ वास्तविक से गलत से डिफ़ॉल्ट मान को स्विच किया है)।
इसलिए आम तौर पर रिलीज़ में सटीक संस्करणों को परिभाषित करना एक अच्छा विचार है। Tim's answer अंक के रूप में, maven-versions-plugin निर्भरता संस्करणों को अपडेट करने के लिए एक आसान उपकरण है, विशेष रूप से versions:use-latest-versions और versions:use-latest-releases लक्ष्यों।
बिल्डिंग पुनरुत्पादन के लिए मैं वास्तव में इस अभ्यास (और संस्करण श्रेणियों का उपयोग नहीं) की सिफारिश नहीं करता हूं। एक ऐसा निर्माण जो अचानक अज्ञात कारण के लिए असफल हो जाता है, मैन्युअल रूप से एक संस्करण संख्या को अद्यतन करने से कहीं ज्यादा परेशान होता है। –
@ मार्टिन मैं xyz-SNAPSHOT सम्मेलन से अवगत हूं, लेकिन मैं उन पुस्तकालयों के बारे में सोच रहा था जो अंतिम संस्करणों में भंडार में जारी किए गए हैं (यानी सपने-पुस्तकालय-1.2.3.jar से सपने-पुस्तकालय-1.2.4 तक। जार, और इतने पर)। –
@ पास्कल टिवेंट मैन्युअल रूप से एक पोम में रिलीज नंबर अपडेट करना एक दर्द है यदि आप निरंतर रिलीज कर रहे हैं।मैं इसे पाने के लिए एसएमएम प्लगइन के साथ संयुक्त संस्करण प्लगइन का उपयोग करता हूं (मेरा जवाब देखें)। –