2012-08-06 7 views
21

यह मेरा परियोजना POM (link to the paste, so you can right click > save as pom.xml)मेवेन छाया प्लगइन चेतावनी: हमारे पास एक डुप्लिकेट है - कैसे ठीक करें?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.zybnet</groupId> 
    <artifactId>excel-reporter</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>mvn1</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi</artifactId> 
      <version>3.8</version> 
     </dependency> 
     <dependency> 
      <groupId>net.sf.jasperreports</groupId> 
      <artifactId>jasperreports</artifactId> 
      <version>4.6.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.groovy</groupId> 
      <artifactId>groovy-all</artifactId> 
      <version>2.0.0</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <resources> 
      <resource> 
       <directory>${project.build.sourceDirectory}</directory> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <finalName>${artifactId}-${version}-tmp</finalName> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>1.7.1</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <filters> 
           <filter> 
            <artifact>*:*</artifact> 
            <excludes> 
             <exclude>META-INF/*.SF</exclude> 
             <exclude>META-INF/*.DSA</exclude> 
             <exclude>META-INF/*.RSA</exclude> 
            </excludes> 
           </filter> 
          </filters> 
          <transformers> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <mainClass>com.zybnet.Main</mainClass> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

मैं के रूप में the FAQ में विज्ञापित डिफ़ॉल्ट जार प्लगइन कॉन्फ़िगर करने की सलाह का पालन, लेकिन अभी भी जब मैं चलाने mvn package 20K के बारे में चेतावनी जारी की जाती है। चल रहा है mvn clean या तो मदद नहीं करता है।

this answer के अनुसार, मैं कुछ निर्भरताओं को मैन्युअल रूप से बहिष्कृत कर सकता हूं। हालांकि, मुझे नहीं पता कि यह सही तरीका है, और निर्भरता पेड़ बल्कि जटिल है इसलिए यह कहना मुश्किल है कि कहां से शुरू करना है।

मुझे पता है कि ये समस्या हानिकारक नहीं हैं, लेकिन मुझे चेतावनियों का इलाज करने के लिए उपयोग किया जाता है जो कुछ तय किया जाना चाहिए। इसके अलावा, मैं मेवेन के साथ एक नौसिखिया हूं, इसलिए मैं समझना चाहता हूं कि मेरी समझ में क्या गलत है, और समस्याओं का निवारण कैसे करें।

उत्तर

24

कभी-कभी ऐसा होता है कि एक ही कक्षा परिभाषा दो या अधिक जार फ़ाइलों में पाया जाता है (आम तौर पर इन निर्भरता जार कर रहे हैं) (Maven विधानसभा प्लगइन का उपयोग करते हुए यहां एक विकल्प नहीं है)। ऐसे मामले में, डेवलपर्स निर्भरता से या अंतिम आर्टिफैक्ट (शायद mvn dependency:tree -Ddetail=true की सहायता से) को मैन्युअल रूप से बहिष्कृत करने का प्रयास करने के अलावा डेवलपर कुछ भी नहीं कर सकता है। मैं opened an issue and submitted a patch, इस उत्पादन का उपयोग करते हुए की तरह

[WARNING] xml-apis-1.3.02.jar, xmlbeans-2.3.0.jar define 4 overlappping classes: 
[WARNING] - org.w3c.dom.TypeInfo 
[WARNING] - org.w3c.dom.DOMConfiguration 
[WARNING] - org.w3c.dom.DOMStringList 
[WARNING] - org.w3c.dom.UserDataHandler 
[WARNING] maven-shade-plugin has detected that some .class files 
[WARNING] are present in two or more JARs. When this happens, only 
[WARNING] one single version of the class is copied in the uberjar. 
[WARNING] Usually this is not harmful and you can skip these 
[WARNING] warnings, otherwise try to manually exclude artifacts 
[WARNING] based on mvn dependency:tree -Ddetail=true and the above 
[WARNING] output 
[WARNING] See http://docs.codehaus.org/display/MAVENUSER/Shade+Plugin 

एक से थोड़ा खूबसूरत उत्पादन के साथ डेवलपर मदद और उस mvn dependency:tree से मैं

<dependency> 
    <groupId>net.sf.jasperreports</groupId> 
    <artifactId>jasperreports</artifactId> 
    <version>4.7.0</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi-ooxml</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>bouncycastle</groupId> 
      <artifactId>bcmail-jdk14</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>bouncycastle</groupId> 
      <artifactId>bcprov-jdk14</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.bouncycastle</groupId> 
      <artifactId>bctsp-jdk14</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

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

2

इस समस्या के लिए एक नया अद्यतन वर्तमान मेवेन प्लगइन को अद्यतन कर रहा है। सवाल उपयोग कर रहा है

<version>1.7.1</version> 

जो केवल आपको बता देंगे कि आप:

We have a duplicate org/eclipse/persistence/internal/libraries/asm/AnnotationVisitor.class in /Users/.../repository/org/eclipse/persistence/eclipselink/2.7.0/eclipselink-2.7.0.jar 

आप अनुमान लगाना छोड़कर या परीक्षण और त्रुटि जहां पहली प्रविष्टि जहां अतिव्यापी वर्गों की है। बहुत उपयोगी नहीं है। Fortunatly,

<version>3.1.0</version> 

आप और अधिक उपयोगी उत्पादन है कि जार वे कहाँ से आए शामिल दे देंगे: उदा

annotations-3.0.1.jar, jcip-annotations-1.0.jar define 4 overlapping classes: 
    - net.jcip.annotations.GuardedBy 
    - net.jcip.annotations.NotThreadSafe 
    ... 

इसके बाद आप एक या दूसरे बाहर करते हैं, या अपनी परियोजना के लिए उपयुक्त के रूप में कक्षाओं का नाम बदलने की छाया उपयोग करने का निर्णय कर सकते हैं।

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