2009-06-23 8 views
33

संक्रमणीय निर्भरताओं के कारण, मेरे युद्ध xml-apis, xerces jars द्वारा पॉप्युलेट हो रहे हैं। मैंने मैवेन-वॉर-प्लगइन के संदर्भ पृष्ठ पर निर्देशों का पालन करने का प्रयास किया लेकिन यह काम नहीं कर रहा है।मैवेन युद्ध प्लगइन द्वारा उत्पन्न जार को कैसे बाहर निकालना है?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <packagingExcludes>WEB-INF/lib/xalan-2.6.0.jar,WEB-INF/lib/xercesImpl-2.6.2.jar,WEB-INF/lib/xml-apis-1.0.b2.jar,WEB-INF/lib/xmlParserAPIs-2.6.2.jar</packagingExcludes> 
     <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml> 
     <warName>project1</warName> 
     <warSourceDirectory>src/main/webapp</warSourceDirectory> 
    </configuration> 
</plugin> 

मैं क्या गलत कर रहा हूं? अगर यह मायने रखती है, मुझे पता चला कि Maven युद्ध प्लगइन मैं उपयोग कर रहा हूँ संस्करण पर 2.1-अल्फा -1

उत्तर

60

आप इन निर्भरता के रूप में प्रदान चिह्नित कर सकते हैं है:

<dependency> 
    <groupId>xerces</groupId> 
    <artifactId>xerces</artifactId> 
    <version>2.4.0</version> 
    <scope>provided</scope> 
</dependency> 

इस तरह Maven होगा उन्हें संकलन कक्षा में जोड़ें, लेकिन उन्हें पैकेज नहीं करेगा। यह माना जाता है कि वे आपके सर्वलेट कंटेनर में मौजूद हैं।

Maven बारे में अधिक देखें "गुंजाइश" के अंतर्गत here scopes

संपादित आप इस तरह निर्भरता से उन्हें बाहर कर सकते हैं आप सकर्मक निर्भरता के माध्यम से जोड़ा वर्गों को निकालना चाहते हैं:

<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> 

(this answer से लिया गया)

और देखें here

+0

समस्या यह है कि उदाहरण के लिए xerces को ट्रांजिटिव निर्भरताओं के माध्यम से खींच लिया गया था। मैं इन सभी बाहरी filler के साथ अपने pom.xml populate नहीं करना चाहता। –

+0

मैंने जवाब तय कर लिया है, उम्मीद है कि यह आपकी समस्या हल करेगी। –

+7

'एमवीएन क्लीन पैकेज' के साथ पैकेज को भूलना न भूलें –

5

मैंने इसे ठीक किया।

में थोड़ा और अधिक सावधानी से संदर्भ फिर से पढ़ने पर, मुझे पता चला कि तत्व packagingExcludeswarSourceExcludes होना चाहिए।

+0

क्या आपने मेरे सुझाव की कोशिश की है? यह आपको प्रत्येक जार को दो बार (दोनों निर्भरता और बहिष्कृत) का उल्लेख करने से बचाएगा –

+0

जो आपके द्वारा उपयोग की जाने वाली युद्ध प्लगइन के संस्करण के लिए सच है। 2.1-अल्फा -2 में यह पैकेजिंग में बदल गया है शामिल है। अधिक जानकारी के लिए http://jira.codehaus.org/browse/MWAR-135 देखें – Salandur

+0

प्लगइन के 2.1.1 संस्करण में यह काम करता है: '<पैकेजिंग शामिल> वेब-आईएनएफ/lib/xercesImpl-2.9.1.jar, वेब-आईएनएफ/lib/xml-apis-1.3.04.jar ', सामान्य बहिष्करण काम नहीं कर रहा है। मैंने इन deps को "प्रदान" के रूप में ओवरराइड करने की कोशिश नहीं की है। – virgo47

5

ट्रांजिटिव निर्भरताओं को छोड़ने के बारे में, मुझे लगता है कि ट्रांजिटिव निर्भरताओं के ट्रैनस्टिव के साथ काम नहीं करते हैं, और मुझे लगता है कि यह मामला हो सकता है।

उदाहरण के लिए

, हाइबरनेट कोर की निर्भरता को जोड़ने -> dom4j -> कोई संभावना नहीं एक्सएमएल-apis यदि जोड़ने के अपने हाइबरनेट कोर के पास एक्सएमएल-APIs के बाहर करते हैं, अभी भी एक्सएमएल-apis जोड़ने ...

2

मैं था युद्ध फ़ाइल के आधार पर संशोधित करने के लिए। मुझे lib से कुछ पुरानी जार फ़ाइल से बचने की जरूरत थी। POM.xml कॉन्फ़िगरेशन का यह स्निपेट मेरे लिए अच्छा काम करता है। मैं मेवेन 2.2 का उपयोग करता हूं।

<build> 
    <plugins> 
     <!-- put aside some unwanted jars from war...--> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <overlays> 
        <overlay> 
         <groupId>com.company.app</groupId> 
         <artifactId>web_app</artifactId> 
         <excludes> 
          <exclude>WEB-INF/lib/json-lib-2.2.2-jdk13.jar</exclude>         
         </excludes> 
        </overlay> 
       </overlays> 
      </configuration> 
     </plugin> 
     .... 
0

जब आप सकर्मक निर्भरता (आप युद्ध के अंदर जार के एक लॉस है) के साथ समस्या है Maven 3 (मैं 3.0.2 प्रयुक्त) प्रदान की गुंजाइश साथ साथ संकलन। आप Maven के पुराने संस्करणों का उपयोग करते हैं (मैं 2.2.1 प्रयुक्त), युद्ध क्या spected है (केवल नहीं निर्भरता प्रदान की

2

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

उदाहरण के लिए, आप 'myPackageA' है, जो किले की दीवार पर निर्भर करता है, जिस पर Xerces निर्भर करता है पर निर्भर करते हैं कहते हैं, तो आप अपने myPackageA निर्भरता में Xerces बाहर कर सकते हैं:

<groupId>myPackageA.dependsOnRampart.whichDependsOnXerces</groupId> 
<artifactId>someArtifact</artifactId> 
<version>2.1</version> 
<exclusions> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xmlParserAPIs</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xml-apis</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xercesImpl</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>resolver</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>serializer</artifactId> 
    </exclusion> 
</exclusions> 

बाद में अपने निर्भरता की जाँच करने के लिए, रन ' एमवीएन निर्भरता: पेड़ 'और उम्मीद है कि आप किसी भी xerces निर्भरताओं को नहीं देख पाएंगे।

1

मेरा उत्तर here देखें। packaging-excludes प्रविष्टि केवल maven-war-plugin संस्करण 2.1-alpha-1 and above के साथ काम करता है। इसलिए, आपको इस्तेमाल किए गए संस्करण को अपग्रेड करना पड़ सकता है या आप निर्भरता-स्तर इंजेक्शन का उपयोग करना पसंद कर सकते हैं क्योंकि यह विशिष्ट जारों का अधिक सटीक बहिष्कार है।

0

आप <packagingExcludes></packagingExcludes> के अंदर </configuration><configuration> के अंदर निर्दिष्ट करके ऐसा कर सकते हैं।

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>3.2.0</version> 
     <configuration> 
      <packagingExcludes> 
      WEB-INF/lib/ex1-*.jar, 
      WEB-INF/lib/ex2-logging-*.jar 
      </packagingExcludes> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

आप वाइल्ड कार्ड और नियमित अभिव्यक्ति भी द्वारा निर्दिष्ट कर सकते हैं। अधिक जानकारी के लिए यह link देखें।

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