2008-10-29 22 views
44

में एक तृतीय पक्ष SNAPSHOT प्रोजेक्ट पर निर्भर करता है जो एक प्रोजेक्ट को रिलीज़ करने के लिए है, मैं मैवेन रिलीज प्लगइन का उपयोग करके एक स्नैपशॉट प्रोजेक्ट 'foo-1.0-SNAPSHOT' रिलीज़ करना चाहता हूं। यह परियोजना किसी तृतीय पक्ष मॉड्यूल 'बार-1.0-स्नैपशॉट' पर निर्भर करती है जिसे अभी तक जारी नहीं किया गया है। मैं अपने प्रोजेक्ट के pom.xml में विकल्प 'allowTimestampedSnapshots' का उपयोग टाइमस्टैंप स्नैपशॉट अनुमति देने के लिए, लेकिन मैं मान लेते हैं कि 3 पार्टी मॉड्यूल (बार) टाइमस्टैंप नहीं है जब तक कि मैं इसे अपने आप को बनाने के रूप में Maven अभी भी अनसुलझे स्नैपशॉट निर्भरता के बारे में शिकायत।मैवेन

क्या निर्भर SNAPSHOT परियोजनाओं के बावजूद प्रोजेक्ट foo को रिलीज़ करने का कोई तरीका है और यदि मैं तृतीय पक्ष प्रोजेक्ट में टाइमस्टैम्प कैसे जोड़ सकता हूं?

उत्तर

7

संक्षिप्त उत्तर following answer देख रहा है .... लंबा उत्तर यह है कि आप इसके आसपास काम कर सकते हैं।

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

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

+5

बिल्कुल सही नहीं है, अन्य उत्तर देखते हैं, आप के माध्यम से '-DignoreSnapshots = TRUE' Maven स्नैपशॉट निर्भरता के साथ भी जारी करने के लिए कह सकते हैं। आपको ऐसा करने से बचना चाहिए और केवल तभी करना चाहिए जब बिल्कुल कोई अन्य विकल्प न हो, एक और कहानी है। –

+0

सोनाटाइप सलाह स्थानीय रिपोजिटरी को तैनात करना है http://blog.sonatype.com/2009/01/best-practices-for-releasing-with-3rd-party-nnapshot-dependencies/#.UstQinlq5t0 –

-2

बस एक पोम में आपके स्वामित्व वाले जार स्थापित करें। मैं आम तौर पर समूह और आर्टिफैक्ट आईडी को यह स्पष्ट करने के लिए बदलता हूं कि यह आधिकारिक संस्करण नहीं है, लेकिन यह आमतौर पर आपकी समस्या के लिए सबसे अच्छा काम है।

6

पिछले उत्तर में समूह और आर्टिफैक्ट आईडी को बदलने का सुझाव दिया गया है ... ऐसा न करें क्योंकि मैवेन इसे उसी आर्टिफैक्ट के रूप में नहीं पहचान पाएगा जब यह निर्भरता जारी की जाएगी और आप दो प्रतियों के साथ समाप्त हो जाएंगे classpath। मेरे पसंदीदा तरीका केवल संस्करण को बदलने के लिए है और मैं कुछ ऐसा करना होगा: [मूल संस्करण] - [मेरी ऑर्ग नाम] - [SVN संस्करण मैं इसे खींच लिया से] तो मैं की तरह 1.0-SONATYPE-3425 कुछ मिलता है। SVN राजस्व का उपयोग करके, मैं हमेशा फिर से स्रोत निकालें और उसे पैच यदि आवश्यक हो तो और पता है कि वास्तव में क्या मैं अपने SVN में पूरे स्रोत खींच के बिना उपयोग कर रहा हूँ कर सकते हैं।

अपडेट - मैं इस बारे में blogged एक समय पहले।

138

समस्या allowTimestampedSnapshots पैरामीटर नाम के साथ है, यह प्रलेखन में है लेकिन प्लगइन का स्रोत अभिव्यक्ति में एक अलग पैरामीटर नाम का उपयोग करता है - ignoreSnapshots

तो बस -DignoreSnapshots=true का उपयोग करें और रिलीज प्लगइन का तैयार लक्ष्य स्नैपशॉट निर्भरताओं को अनदेखा कर देगा।

+8

यह काम करता है और मैं इसका सही जवाब मानें (जिसे ओपी ढूंढ रहा है)। शर्मिंदा है कि इसमें पर्याप्त अप-वोट नहीं हैं। 1! बेशक, आप उन कलाकृतियों को प्रकाशित नहीं करना चाहते हैं जिनके पास स्नैपशॉट निर्भरताएं हैं, क्योंकि आपको अपने उपभोक्ताओं को उस स्नैपशॉट को भी ढूंढने की आवश्यकता होगी। यदि आप अपने परीक्षण सूट (या इसी तरह) में स्नैपशॉट का उपयोग कर रहे हैं तो "-DignoreSnapshots = true" निश्चित रूप से एक अच्छा कामकाज है। – joelittlejohn

+1

मैं लगभग तब तक छोड़ दिया जब तक मैं इस पर ठोकर खाई! धन्यवाद! –

12

Maven रिलीज-प्लगइन विकल्प

-DallowTimestampedSnapshots=true 

मेरे मामले में मदद की के बजाय

-DignoreSnapshots=true 

का उपयोग करना, इस तैयार करने और एक रिलीज प्रदर्शन करने के लिए स्नैपशॉट संस्करण के साथ निर्भरता का उपयोग करने की अनुमति देगा।

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