2009-05-03 24 views
25

मेरी प्रोजेक्ट में एक जार फ़ाइल शामिल है क्योंकि इसे एक संक्रमणकारी निर्भरता के रूप में सूचीबद्ध किया गया है।मेवेन: एक एकल संक्रमणीय निर्भरता को हटाएं

हालांकि, मैंने न केवल सत्यापित किया है कि मुझे इसकी आवश्यकता नहीं है, लेकिन यह समस्याएं पैदा करता है क्योंकि जार फ़ाइलों के अंदर एक कक्षा एक कक्षा को छाया देती है जिसे मुझे किसी अन्य जार फ़ाइल में चाहिए।

मैं अपनी ट्रांजिटिव निर्भरताओं से एक जार फ़ाइल कैसे छोड़ूं?

उत्तर

30

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

<dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring</artifactId> 
      <version>2.5.6</version> 
    </dependency> 
    <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
      <scope>provided</scope> 
    </dependency> 

साइड प्रभाव: आप के संस्करण का उल्लेख करना होगा विरूपण साक्ष्य-टू-जा-नजरअंदाज कर दिया है, और अपने पोम निर्माण अभी पुन: प्राप्त किया जाएगा; नियमित बहिष्करण के साथ यह मामला नहीं है। यदि आप फ़ायरवॉल के पीछे अपना निजी मैवेन रिपोजिटरी चलाते हैं तो यह आपके लिए एक समस्या हो सकती है।

3

आप समस्याग्रस्त आर्टिफैक्ट को स्पष्ट रूप से छोड़कर ऐसा कर सकते हैं। निर्भरता है कि समस्या भी शामिल है ले लो और यह निशान बाहर रखा जाना:

Maven website से:

 <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring</artifactId> 
       <version>2.5.6</version> 
       <exclusions> 
         <exclusion> 
           <groupId>commons-logging</groupId> 
           <artifactId>commons-logging</artifactId> 
         </exclusion> 
       </exclusions> 
     </dependency> 
15

सही तरीका:

<dependency> 
    <groupId>group-a</groupId> 
    <artifactId>artifact-a</artifactId> 
    <version>1.0</version> 
    <exclusions> 
    <exclusion> 
     <groupId>group-c</groupId> 
     <artifactId>excluded-artifact</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
+0

मैं ओले विधि द्वारा जार निर्भरता से सर्वलेट-एपीआई को बाहर करने का प्रयास कर रहा हूं और यह मेरे लिए काम नहीं करता है लेकिन इस विधि की कोशिश की और यह चाल है। धन्यवाद। – Aaron

+0

यह मेरे लिए काम करता था जब मुझे के आधार पर निर्भरता को बाहर करना पड़ा। धन्यवाद! –

+0

यदि आप निर्भरता जेआरई में शामिल हैं तो आप _system_ स्कोप का भी उपयोग कर सकते हैं। जैक्सबी-एपीआई 2.0 और जेआरई 6 के उदाहरण के लिए। [मेवेन सिस्टम निर्भरता] देखें (http://maven.apache.org/guides/introduction/introduction-to- निर्भरता-mechanism.html#System_Dependencies) –

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