2012-09-21 70 views
1

由于存储库中有重复的jar,我得到一个重复的类错误。 罐子来了一个开源的Apache项目的子模块的POM,项目是James,子模块是container-springMaven重复存储库中的jar

这里是詹姆斯的根pom.xml中:

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

这里是子模块容器弹簧的pom.xml:

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

+1

请正确格式化POM让其他有能够阅读你发布的内容。 – khmarbaise

+0

您可能想分享并向我们展示如何使用这些依赖关系,以便我们可以分辨出问题所在。 –

回答

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

我不知道你的项目中的哪些罐子与上面的罐子冲突,但我注意到弹簧的依赖取决于apache公共套件(c ommons-xxx deps)。很多项目中使用它们(IMO了很多自己的东西应该在JDK本身被合并,但那是另一个线程),但一些公共图书馆有一些问题:

  • 其向后兼容性问题
  • 的groupId和artifactId的沿着岁月改变了,所以你可以 平等罐子不同的名称结束(公共-xxx和 org.apache.commons.xxx)

其实这是很正常的现象有依赖性冲突与Apache普通套房,所以我在这里猜测这是你的行为尿问题。

通常这种情况的解决方案是宣布你在你的项目中直接依赖需要Apache公共库和排除冲突库也依赖关系部分,像@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> 
+0

当我添加弹簧依赖项时出现了这个问题。然后我删除了春天的依赖,但错误没有改变。毕竟我在eclipse中生成了一个新的工作区,并将现有的项目导入到它中,并且错误消失了,这让我觉得也不是eclipse,也不是maven,也不是spring依赖关系是合理的。谢谢你的回答。 – merveotesi

3

应指定相应的罐子一个子项目,你想排除在主jar的依赖声明中。

有关如何定义依赖项排除的更多详细信息,请参阅maven documentation

相关问题