2012-12-06 67 views
0

有兩個項目:
A ----有一個lib commons vers。 1.3.7 ---(取決於B)
B ----有lib commons vers。 1.2.5依賴版本衝突maven

所以,我們正在建設項目B,lib commons vers。 1.2.5將被包含並安裝在本地存儲庫中,然後...如果我們執行構建的A(依賴於B),Maven將決定lib commons vers。 1.3.7必須包括在內,因爲lib距離樹根的距離最小...... 我知道如果我們將工件的版本設置爲:1.2.5-這是推薦的版本。但是如果我們把它放在[]中 - 這是一個很難的要求,maven應該應用另一個策略來解決版本衝突 - 以包含該工件的推薦版本。但是當我嘗試這樣做的時候,它並沒有起作用,因爲Maven會從loc庫獲取工件,其中包含對lib commons vers的引用。 1.2.5在清單文件中,但包含lib - commons vers。 1.3.7。你能否告訴我該如何解決這個問題,或者在列表中可能有一些工具或者maven插件可以告訴你這樣的問題。

回答

1

您需要的依賴使用排除。類似的東西(它只是一個樣本):

<dependency> 
<groupId>org.springframework.integration</groupId> 
<artifactId>spring-integration-amqp</artifactId> 
<version>2.1.0.RELEASE</version> 
<exclusions> 
    <exclusion> 
     <artifactId>spring-beans</artifactId> 
     <groupId>org.springframework</groupId> 
    </exclusion> 
</exclusions> 
</dependency> 

如果您使用的是Eclipse,不想做手工,你可以打開一個POM文件並選擇「依賴層次結構」選項卡做在其下您可以看到所有的依賴關係層次結構。然後,你可以右鍵單擊你想排除的依賴關係,然後點擊'排除Maven神器'

+0

@jonasas,你的意思是說,在項目的構建過程中,項目B將包含沒有公共庫?但這不是一個解決方案。實際上項目A對項目B一無所知,maven只提供B.jar和commons vers。 1.2.5在MANIFEST文件中,但由於「最接近勝利」策略Maven決定lib commons vers。應該包括1.3.7。那就是問題 – gizzy

+0

如果你不想使用1.3.7版本,並且想要使用庫的依賴項目的版本(1.2.5),你不能直接從項目A中刪除直接依賴項嗎? – jonasnas

0

你需要運行mvn dependency:tree