2008-10-03 18 views
86

क्या विभिन्न प्रोफाइल के लिए maven pom.xml फ़ाइल में निर्भरता का एक अलग सेट होना संभव है?मैवेन में विभिन्न निर्माण प्रोफाइल के लिए विभिन्न निर्भरता

उदा।

mvn -P debug 
mvn -P release 

मैं एक प्रोफ़ाइल एक ही कक्षा के नाम और एक ही इंटरफेस के विभिन्न कार्यान्वयन है कि में एक अलग निर्भरता जार फ़ाइल लेने के लिए चाहते हैं।

+0

इसका उपयोग विभिन्न वेब सर्वरों को लक्षित करते समय किया जा सकता है। उदाहरण के लिए, जब जावाईई 5 सर्वर के लिए निर्माण करते हैं, जो जेएक्सबी जैसे libs प्रदान करता है, जिसे आपको अपनी युद्ध फ़ाइल में शामिल नहीं करना चाहिए, जावाईई 1.4 सर्वर के लिए बनाम बिल्डिंग, जहां आपको जेएक्सबी जार शामिल करना चाहिए। – Leonel

उत्तर

135

के शब्दों में maven documentation on this:

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

(जोर मेरा है)

बस प्रोफ़ाइल घोषणा के अंदर ही release प्रोफ़ाइल के लिए निर्भरता डाल दिया और debug के लिए भी ऐसा ही।

 
<profiles> 
    <profile> 
     <id>debug</id> 
     … 
     <dependencies> 
      <dependency>…</dependency> 
     </dependencies> 
     … 
    </profile> 
    <profile> 
     <id>release</id> 
     … 
     <dependencies> 
      <dependency>…</dependency> 
     </dependencies> 
     … 
    </profile> 
</profiles> 
+0

यह विधि संपादन मोड में कोड को अनसुलझा कर देगी। यदि डीबग सक्रिय है, तो रिलीज की निर्भरता जार गायब हो जाएगी, और कोड त्रुटि होगी। इसे कैसे हल करें? – brucenan

+0

आप रिलीज विशिष्ट निर्भरता के दायरे को निर्भरता पदानुक्रम में 'प्रदत्त' के रूप में सेट कर सकते हैं और रिलीज प्रोफ़ाइल अनुभाग में 'संकलन' के दायरे को रीसेट कर सकते हैं। ताकि निर्भरता संकलन के लिए उपलब्ध हो लेकिन 'डीबग' प्रोफ़ाइल के लिए अंतिम युद्ध में नहीं। – uday

+0

@uday अगर आप उस दृष्टिकोण को दिखाने का उत्तर देंगे तो मुझे इसे – javadba

3

आपका ग्रुप, artifactId गुण के रूप में अपने प्रोफाइल में tokenized किया जाना चाहिए और आप सामान्य अनुभाग के लिए अपने निर्भरता स्थानांतरित कर सकते हैं।

+1

ऊपर उठाना अच्छा लगेगा यदि यह 1 निर्भरता है तो यह केवल तभी होगा। यदि निर्भरता की संख्या डीबग और रिलीज के बीच भिन्न होती है तो केवल टोकनिंग काम नहीं करेगा। उस मामले के लिए मैं अनुशंसा करता हूं कि प्रोफाइल अनुभाग में डीपी को टोकननाइज़ न करें और स्पष्ट रूप से परिभाषित न करें। –

+0

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

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