2013-01-14 56 views
8

假設我有一個複雜的項目,其中包含很多依賴關係。依賴關係的版本由很多導入範圍poms管理。我的項目依賴於工件group:artifact,它依賴於工件group:transitive-dependency。當我運行dependency:tree我看到這樣的事情:跟蹤Maven中的管理依賴項版本

+- group:artifact:jar:1.3 
    +- group:transitive-dependency:jar:1.1 (version managed from 1.3) 

問題是group:artifact:1.3需要1.3或更高版本group:transitive-dependency。肯定其中一個進口poms是強制錯誤的版本。但除了全部搜索之外,還有什麼方法可以知道哪一個是?

+0

您是否嘗試過上運行你的父母proejct'MVN site'來看,在'依賴convergence'輸出? – Tim

+0

傳遞性依賴不會出現在依賴性收斂報告中。它也沒有顯示依賴管理的地方。 –

回答

5

您應該試試maven-enforcer插件並將其配置爲執行DependencyConvergence,例如,

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.2</version> 
    <executions> 
     <execution> 
     <id>enforce</id> 
     <configuration> 
      <rules> 
      <DependencyConvergence/> 
      </rules> 
     </configuration> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

這將顯示哪些頂級依賴項在其依賴關係樹中具有不同版本的其他依賴項。然後使用排除來抑制不想使用的依賴項變體。

2

發生這種情況時,2個或更多的父Poms與相同的工件衝突。

對於例如,

[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile [INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile (version managed from 2.2) [INFO] | +- oro:oro:jar:2.0.8:compile

在我的情況下,框架 - 核心提及log4jextentsions 2.2。和我的超級朋友說log4jextentsions 2.3。不知何故,框架核心說服maven使用log4jextentsions 2.2。

後來當我更新框架核心POM使用2.3,

[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile [INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile [INFO] | +- oro:oro:jar:2.0.8:compile