1

リポジトリ内のjarが重複しているため、クラスの重複エラーが発生します。Jarsには、オープンソースのApacheプロジェクトのサブモジュールのpomが付属しています。プロジェクトはJames、サブモジュールはcontainer-springです。

Jamesのルートにあるpom.xmlは次のとおりです。

http://svn.apache.org/repos/asf/james/server/tags/james-server-3.0-beta4/pom.xml

サブモジュールcontainer-springのpom.xmlは次のとおりです。

http://svn.apache.org/repos/asf/james/server/tags/james-server-3.0-beta4/container-spring/pom.xml

4

2 に答える 2

3

メインjarの依存関係宣言で、除外するサブプロジェクトに対応するjarを指定する必要があります。

依存関係の除外を定義する方法の詳細については、Mavenのドキュメントを参照してください。

于 2012-09-23T18:36:34.097 に答える
3

あなたの質問に答えるために、私は次のpom.xmlを使用して単純なMavenプロジェクトを構成しました。

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.stackoverflow.tuxi</groupId>
  <artifactId>duplicatedjar</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>org.apache.james</groupId>
      <artifactId>james-server</artifactId>
      <version>3.0-beta4</version>
      <type>pom</type>
    </dependency>
    <dependency>
      <groupId>org.apache.james</groupId>
      <artifactId>james-server-container-spring</artifactId>
      <version>3.0-beta4</version>
    </dependency>
  </dependencies>
</project>

次に、maven依存関係ツリーコマンドを実行して、依存関係を分析します。

% mvn dependency:tree                                                                                                                                                                                              
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building duplicatedjar 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ duplicatedjar ---
[INFO] com.stackoverflow.tuxi:duplicatedjar:jar:1.0-SNAPSHOT
[INFO] +- org.apache.james:james-server:pom:3.0-beta4:compile
[INFO] \- org.apache.james:james-server-container-spring:jar:3.0-beta4:compile
[INFO]    +- org.apache.james:james-server-lifecycle-spring:jar:3.0-beta4:compile
[INFO]    |  +- org.apache.geronimo.specs:geronimo-annotation_1.1_spec:jar:1.0.1:compile
[INFO]    |  \- org.apache.geronimo.specs:geronimo-jpa_2.0_spec:jar:1.0:compile
[INFO]    +- org.apache.james:james-server-lifecycle-api:jar:3.0-beta4:compile
[INFO]    +- org.apache.james:james-server-filesystem-api:jar:3.0-beta4:compile
[INFO]    |  +- org.apache.james:apache-jsieve-manager-api:jar:0.5:compile
[INFO]    |  \- commons-io:commons-io:jar:2.0.1:compile
[INFO]    +- org.apache.james:james-server-mailetcontainer-api:jar:3.0-beta4:compile
[INFO]    +- org.apache.james:james-server-protocols-library:jar:3.0-beta4:compile
[INFO]    |  +- org.apache.james:james-server-util:jar:3.0-beta4:compile
[INFO]    |  +- org.apache.james.protocols:protocols-netty:jar:1.6.2:compile
[INFO]    |  \- io.netty:netty:jar:3.3.1.Final:compile
[INFO]    +- org.apache.james:james-server-data-api:jar:3.0-beta4:compile
[INFO]    +- org.apache.james:james-server-core:jar:3.0-beta4:compile
[INFO]    |  \- org.apache.james:apache-mailet-base:jar:1.1:compile
[INFO]    +- org.apache.james:apache-james-mailbox-api:jar:0.4:compile
[INFO]    +- org.apache.james:apache-james-mailbox-tool:jar:0.4:compile
[INFO]    |  +- org.apache.james:apache-james-mailbox-store:jar:0.4:compile
[INFO]    |  |  +- org.apache.james:apache-mime4j-core:jar:0.7.2:compile
[INFO]    |  |  \- org.apache.james:apache-mime4j-dom:jar:0.7.2:compile
[INFO]    |  +- org.apache.james:apache-james-mailbox-memory:jar:0.4:compile
[INFO]    |  +- org.apache.geronimo.specs:geronimo-annotation_1.0_spec:jar:1.1.1:compile
[INFO]    |  \- org.apache.openjpa:openjpa:jar:2.1.0:compile
[INFO]    |     +- net.sourceforge.serp:serp:jar:1.13.1:compile
[INFO]    |     |  \- junit:junit:jar:3.8.1:compile
[INFO]    |     +- org.apache.geronimo.specs:geronimo-jms_1.1_spec:jar:1.1.1:compile
[INFO]    |     +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile
[INFO]    |     \- commons-pool:commons-pool:jar:1.5.4:compile
[INFO]    +- org.apache.james.protocols:protocols-api:jar:1.6.2:compile
[INFO]    +- org.apache.james:apache-mailet:jar:2.4:compile
[INFO]    +- org.springframework:spring-core:jar:3.1.0.RELEASE:compile
[INFO]    |  +- org.springframework:spring-asm:jar:3.1.0.RELEASE:compile
[INFO]    |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO]    +- org.springframework:spring-beans:jar:3.1.0.RELEASE:compile
[INFO]    +- org.springframework:spring-context:jar:3.1.0.RELEASE:compile
[INFO]    |  +- org.springframework:spring-aop:jar:3.1.0.RELEASE:compile
[INFO]    |  \- org.springframework:spring-expression:jar:3.1.0.RELEASE:compile
[INFO]    +- org.springframework:spring-web:jar:3.1.0.RELEASE:compile
[INFO]    |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO]    +- org.springframework.osgi:spring-osgi-extender:jar:1.2.1:compile
[INFO]    |  +- org.springframework.osgi:spring-osgi-core:jar:1.2.1:compile
[INFO]    |  |  +- org.springframework:org.springframework.aop:jar:2.5.6.SEC01:compile
[INFO]    |  |  |  \- org.aopalliance:com.springsource.org.aopalliance:jar:1.0.0:compile
[INFO]    |  |  +- org.springframework:org.springframework.beans:jar:2.5.6.SEC01:compile
[INFO]    |  |  +- org.springframework:org.springframework.context:jar:2.5.6.SEC01:compile
[INFO]    |  |  \- org.springframework:org.springframework.core:jar:2.5.6.SEC01:compile
[INFO]    |  \- org.springframework.osgi:spring-osgi-io:jar:1.2.1:compile
[INFO]    +- org.osgi:org.osgi.core:jar:4.2.0:compile
[INFO]    +- commons-configuration:commons-configuration:jar:1.6:compile
[INFO]    |  +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO]    |  \- commons-lang:commons-lang:jar:2.4:compile
[INFO]    +- org.slf4j:slf4j-api:jar:1.6.1:compile
[INFO]    +- javax.mail:mail:jar:1.4.4:compile
[INFO]    \- log4j:log4j:jar:1.2.16:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.140s
[INFO] Finished at: Sun Sep 30 12:30:30 BRT 2012
[INFO] Final Memory: 12M/169M
[INFO] ------------------------------------------------------------------------

プロジェクト内のどのjarが上記のものと競合しているかはわかりませんが、春の依存関係はapache commons suite(commons-xxx deps)に依存していることに気付きました。多くのプロジェクトがそれらを使用しています(IMOの多くのものはJDK自体に組み込まれる必要がありますが、それは別のスレッドです)が、一部のコモンズライブラリにはいくつかの問題があります。

  • 後方互換性の問題
  • groupidとartifactidは年月を経て変更されたため、異なる名前(commons-xxxとorg.apache.commons.xxx)の同じjarファイルになってしまう可能性があります。

実際、apache commons suiteと競合する依存関係があるのはごく普通のことなので、ここでそれが実際の問題であると推測しています。

通常、これに対する解決策は、プロジェクトで必要なapache commons libsを依存関係で直接宣言し、@Vikdorが言ったように依存関係セクションでも競合するライブラリを除外することです。

おそらく次のようなものになります(以下の例のようにすべてではなく、競合するものだけを削除することが重要です。そうしないと、ソフトウェアが正しく機能しません):

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.stackoverflow.tuxi</groupId>
  <artifactId>duplicatedjar</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>org.apache.james</groupId>
      <artifactId>james-server</artifactId>
      <version>3.0-beta4</version>
      <type>pom</type>
    </dependency>
    <dependency>
      <groupId>org.apache.james</groupId>
      <artifactId>james-server-container-spring</artifactId>
      <version>3.0-beta4</version>
      <!-- DO NOT exclude all of them, only the conflicting ones -->
      <exclusions>
        <exclusion>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
        </exclusion>
        <exclusion>
          <groupId>commons-pool</groupId>
          <artifactId>commons-pool</artifactId>
        </exclusion>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
        <exclusion>
          <groupId>commons-collections</groupId>
          <artifactId>commons-collections</artifactId>
        </exclusion>
        <exclusion>
          <groupId>commons-lang</groupId>
          <artifactId>commons-lang</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</project>
于 2012-09-30T15:49:28.873 に答える