2011-11-09 57 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中的聲明,將是首選。

相關問題