2012-08-06 18 views
21

これは私がthe FAQでアドバタイズされたデフォルトのjarプラグインの設定のアドバイスに従っが、それでも私はmvn package約20Kの警告が発行されて実行したときに私のプロジェクトPOM (link to the paste, so you can right click > save as pom.xml)Maven shade Plugin警告:重複があります。修正方法は?

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

です。実行中のmvn cleanも役に立ちません。

this answerによれば、いくつかの依存関係を手動で除外できます。しかし、それが正しいかどうかは分かりません。依存関係のツリーは複雑なので、どこから始めるべきかを議論するのは難しいです。

私はこれらの問題は有害ではないことを知っていますが、私は警告を修正する必要があるものとして扱います。また、私はMavenの初心者ですから、私の理解に間違いがあり、問題を解決する方法を理解したいと思います。

(Mavenのアセンブリのプラグインを使用すると、ここではオプションではありません)

答えて

24

時には同じクラス定義が二つ以上のJARファイル(通常、これらは依存関係のJARファイルです)で発見されていることが起こります。そのような場合、依存関係や最終的な成果物から何を手動で除外するか(おそらくmvn dependency:tree -Ddetail=trueの助けを借りて)を把握しようとする以外は、開発者が何もできません。 I 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から、私は

​​3210

のようなセクションを追加してまで数千からの警告の数を減らすことに成功していますカップル何十?それでも、これは完璧ではありません。それでも、彼らは名前の衝突につながるクラスをコピーし続けます(なぜわかりません)。それでも、このソリューションはこの特定のプロジェクトに固有であり、他のものに簡単に移植することはできません。

2

この問題の最新のアップデートでは、現在のmavenプラグインに更新されています。

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 

どこでクラスを重複している最初のエントリ推測か試行錯誤するあなたを残す: 質問はあなたがいることを教えてくれます

<version>1.7.1</version> 

を使用しています。それほど役に立たない。 例えば:Fortunatly、

<version>3.1.0</version> 

はあなたに彼らがどこから来たjarを含む、より便利な出力が得られます

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

あなたは、1つまたは他を除外することを決定、またはプロジェクトに応じて、クラスの名前を変更するために日陰を使用することができます。

関連する問題