मैवेन इस तरह से काम नहीं करता है।
एक ही आर्टिफैक्ट आईडी और समूह आईडी के साथ एक से अधिक निर्भरता का संकल्प लेकिन एक अलग संस्करण के साथ एक निर्भरता का परिणाम होगा (संस्करण का उपयोग कोई निर्धारक नहीं है)।
ही artifactId और ग्रुप लेकिन दो अलग-अलग संस्करणों के साथ युद्ध की एक ही lib फ़ोल्डर में साथ दो कलाकृतियों की उपस्थिति शायद इनमें से किसी एक से संबंधित है:
आप mvn clean package
निष्पादित नहीं लेकिन केवल mvn package
।
आप मेवेन युद्ध प्लगइन का एक बग संस्करण का उपयोग करते हैं। इसे जांचने के लिए इसे अपडेट करने का प्रयास करें।
आपके पास एक मेवेन प्लगइन है जो घटक के निर्माण के दौरान लक्षित फ़ोल्डर के WEB-INF/lib
फ़ोल्डर में विकेट जार 6.18.0 की प्रतिलिपि बनाता है।
आपके द्वारा बनाई जा रही मेवेन वायर प्रोजेक्ट के रूप में निर्भरता के रूप में प्रकार की आर्टिफैक्ट निर्भरता है। इस मामले में, WAR प्रॉपर्टी की निर्भरताएं आपके द्वारा बनाई गई WAR प्रोजेक्ट में overlaid हैं।
दोहराया JAR क्योंकि युद्ध निर्भरता के बारे में एक दिलचस्प Maven मुद्दा:
JARs with different versions can be in WEB-INF/lib with war as dependencies
Your answer और अपने comment संकेत मिलता है कि वास्तव में आप अपने निर्माण में एक युद्ध निर्भरता है।
दुर्भाग्यवश, इस सीमा को बाईपास करने के लिए वास्तव में एक अच्छा और दीर्घकालिक प्रभावी समाधान नहीं है।
के रूप में मेरी टिप्पणी में कहा, वास्तविक मुद्दे के लिए Maven युद्ध प्लगइन का packagingExcludes
संपत्ति एक वैध तरीके को इस्तेमाल कर रहा है:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<!-- ... -->
<packagingExcludes>WEB-INF/lib/wicket-*-6.18.0.jar</packagingExcludes>
</configuration>
</plugin>
लेकिन सावधान रहना, कि का उपयोग करते हुए समय के माध्यम से कम मजबूत अपने निर्माण करेंगे। वह दिन जहां आप WAR निर्भरता के संस्करण को अपडेट करते हैं और अपने नए संस्करण में, यह फिर से विकेट का एक अलग संस्करण खींचता है, फिर भी आपके पास अपने निर्मित युद्ध में दो अलग-अलग संस्करणों के साथ डुप्लिकेट जार रखने का जोखिम है।
maven-war-plugin
की overlay
तत्व निर्दिष्ट द्वारा the overlay सुविधा का उपयोग करना आम तौर पर बेहतर रूप में यह ओवरले युद्ध निर्भरता के लिए आवेदन पर केंद्रित है। यह समस्या को जल्दी हल करता है। नतीजतन, आप युद्ध निर्भरता से किसी भी विकेट के जार को बाहर करने के निर्धारित कर सकते हैं:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<version>2.4</version>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>com.whatever.youlike</groupId>
<artifactId>myArtifact</artifactId>
<excludes>
<exclude>WEB-INF/lib/wicket-*.jar</exclude>
</excludes>
</overlay>
</overlays>
</configuration>
</plugin>
इस तरह बेहतर है, लेकिन यह अभी भी एक समाधान नहीं है।
वह दिन जहां निर्भरता युद्ध अद्यतन किया गया है और यह आपके वास्तविक निर्माण में घोषित नई निर्भरताओं (विकेट के अलावा) खींचता है लेकिन विभिन्न संस्करणों के साथ, आप एक ही तरह के मुद्दे के साथ समाप्त कर सकते हैं।
मुझे लगता है कि एक युद्ध कलाकृति पर निर्भरता घोषित करना केवल तभी किया जाना चाहिए जब हमारे पास विकल्प न हो।
चूंकि पोम्स और प्रोजेक्ट रीफैक्टरिंग संभव है, एक सामान्य जार निर्भरता पेश करना जो दो डब्ल्यूएआर निर्भर करता है और इसमें दो WARs के लिए केवल सामान्य स्रोत और संसाधन होते हैं, वास्तव में चीजों को सरल बनाते हैं।
आप अपने पोम पोस्ट कृपया:
मैं युद्ध प्लगइन में स्पष्ट बहिष्कार को विन्यस्त द्वारा हल किया? – BackSlash