2011-11-09 37 views
1

当用Maven构建这个项目,我得到2罐中我的目标目录: aopalliance-aopalliance-1.0.jar org.aopalliance-aopalliance-1.0.jarMaven的依赖产生额外的JAR在该项目的目标目录

我怀疑我的pom.xml中的以下依赖项是一个负责人

<dependency> 
    <groupId>org.aopalliance</groupId> 
    <artifactId>aopalliance</artifactId> 
    <version>1.0</version> 
</dependency> 

但我不明白为什么会发生这种情况。我在我的pom.xml中有很多其他的依赖项,这些依赖项以相同的方式定义,并且JAR与其他JAR一样,也安装在Nexus中,但其他依赖项不会导致JAR在我的目标目录中。

谢谢。

+1

依赖项不应该对目标目录有任何影响。你能包含整个pom.xml吗? – bpgergo

+0

这个工件是手动安装在你的连接处还是通过镜子从中央拉出来? – Jon7

+0

工件被手动安装在nexus中,并且据我所知,在pom中安装和引用的方式与其他工件在pom中的安装和引用方式之间完全没有区别。因此我的迷茫。 – ccc

回答

1

根据这个答案,假设您使用某种类似Maven Assembly插件或Maven EAR插件的插件来将项目的所有依赖项复制到目标文件夹。

很可能像Guice这样的一些依赖项正在拉动aopalliance:aopalliance工件(groupId:artifactId表示法),而您刚刚添加了对org.aopalliance:aopalliance的依赖关系。 Maven不知道它只是两次添加相同的类文件 - 它检查groupId和artifactId以查看两个罐子是否(据说)不同。

你有两个选择:

  1. 删除依赖于你的劲歌,或改变的groupId到aopalliance

  2. 跟踪aopalliance依赖关系来自哪里,然后从有问题的构件的传递依赖性中排除aopalliance构件。

您可以通过运行mvn dependency:tree做(2),或通过打开你的POM并查看相关层次标签m2eclipse插件。下面是依赖的一些示例输出:树命令:

mygroup:earproj:pom:2.3.1-SNAPSHOT 
+- mygroup:wslib:jar:2.3.1-SNAPSHOT:compile 
| +- axis:axis:jar:1.4:compile 
| | +- org.apache.axis:axis-saaj:jar:1.4:compile 
| | +- axis:axis-wsdl4j:jar:1.5.1:runtime 
| | +- commons-logging:commons-logging:jar:1.0.4:runtime 
| | \- commons-discovery:commons-discovery:jar:0.2:runtime 
| +- org.apache.axis:axis-jaxrpc:jar:1.4-noqname:compile 
| \- commons-httpclient:commons-httpclient:jar:3.0.1:runtime 
|  \- commons-codec:commons-codec:jar:1.2:runtime 
+- mygroup:commonclass:2.3.1-SNAPSHOT:compile 

看看共享记录为例,我们可以看到,轴:轴库依赖于它。

一旦知道哪个库取决于aopalliance,you can add an exclusion in the POM。如果您保留此排除和org.aopalliance依赖关系在同一个POM中的声明,将是首选。

相关问题