2014-10-11 42 views
1

我有一個父項目包含一打子項目,其中一個子項目使用org.apache.httpcomponents:httpclient:jar:4.3.5,這取決於org.apache.httpcomponents:httpcore:jar:4.3.2如何在Maven中調試工件替換

但是,結果版本httpcore解析爲4.2.1而不是4.3.2。

下在Eclipse中檢查調試選項運行dependency:tree時是輸出的提取:

... 
[DEBUG] Using mirror nexus (http://192.168.0.111:8081/nexus/content/groups/public) for apache.snapshots (http://repository.apache.org/snapshots). 
[DEBUG] testArtifact: artifact=org.apache.httpcomponents:httpclient:jar:4.3.5:compile 
[DEBUG] includeArtifact: artifact=org.apache.httpcomponents:httpclient:jar:4.3.5:compile 
[DEBUG] startProcessChildren: artifact=org.apache.httpcomponents:httpclient:jar:4.3.5:compile 
[DEBUG]  manageArtifactVersion: artifact=org.apache.httpcomponents:httpcore:jar:4.3.2:compile, replacement=org.apache.httpcomponents:httpcore:jar:4.2.1 
[DEBUG] Using mirror nexus (http://192.168.0.111:8081/nexus/content/groups/public) for apache.snapshots (http://repository.apache.org/snapshots). 
... 

這只是表明replacement=org.apache.httpcomponents:httpcore:jar:4.2.1,但它並不能說明更換的原因。父項目的pom.xml使用了相當多的依賴關係,儘管我可以嘗試逐個刪除這些依賴關係並檢查結果,但這會非常耗時。有沒有更有效的方法來調試工件替換?


Here幾乎是完整日誌dependency:tree在Eclipse的檢查與調試選項。

+2

您是否嘗試過'mvn dependency:tree'? – lexicore 2014-10-11 16:01:13

+0

是的,上面的輸出來自於依賴關係:樹 – ysl 2014-10-11 16:04:13

+0

您可以發佈完整的'mvn -X dependency:tree'日誌。 – lexicore 2014-10-11 16:14:59

回答

4

從你的日誌,你可以找到行:

[DEBUG] com.company.xyz:xyz-integration-lib:jar:0.0.1-SNAPSHOT 
[DEBUG] com.company.xyz:xyz-utils:jar:0.0.1-SNAPSHOT:compile 
[DEBUG]  commons-codec:commons-codec:jar:1.8:compile 
[DEBUG] javax.mail:mail:jar:1.4:provided 
[DEBUG]  javax.activation:activation:jar:1.1.1:provided (version managed from 1.1 by org.jboss.spec:jboss-javaee-6.0:3.0.2.Final) 
[DEBUG] org.apache.commons:commons-lang3:jar:3.3.2:compile 
[DEBUG] junit:junit:jar:4.8.2:test 
[DEBUG] com.thoughtworks.xstream:xstream:jar:1.4.7:compile 
[DEBUG]  xmlpull:xmlpull:jar:1.1.3.1:compile 
[DEBUG]  xpp3:xpp3_min:jar:1.1.4c:compile 
[DEBUG] joda-time:joda-time:jar:2.4:compile 
[DEBUG] org.assertj:assertj-joda-time:jar:1.1.0:test 
[DEBUG]  org.assertj:assertj-core:jar:1.3.0:test 
[DEBUG] org.apache.httpcomponents:httpclient:jar:4.3.5:compile 
[DEBUG]  org.apache.httpcomponents:httpcore:jar:4.2.1:compile (version managed from 4.3.2 by org.jboss.as:jboss-as-parent:7.2.0.Final) 
[DEBUG] commons-logging:commons-logging:jar:1.1.3:compile 
[DEBUG] org.slf4j:slf4j-api:jar:1.7.7:compile 
[DEBUG] org.slf4j:slf4j-log4j12:jar:1.7.7:compile 
[DEBUG]  log4j:log4j:jar:1.2.17:compile 
[DEBUG] org.mockito:mockito-all:jar:1.9.5:test 
[DEBUG] org.powermock:powermock-module-junit4:jar:1.5.5:test 
[DEBUG]  org.powermock:powermock-module-junit4-common:jar:1.5.5:test 
[DEBUG]   org.powermock:powermock-core:jar:1.5.5:test 
[DEBUG]    org.javassist:javassist:jar:3.18.1-GA:test (version managed from 3.18.2-GA by org.springframework.boot:spring-boot-dependencies:1.1.4.RELEASE) 
[DEBUG]   org.powermock:powermock-reflect:jar:1.5.5:test 
[DEBUG]    org.objenesis:objenesis:jar:2.1:test 
[DEBUG] org.powermock:powermock-api-mockito:jar:1.5.5:test 
[DEBUG]  org.powermock:powermock-api-support:jar:1.5.5:test 

在那裏你可以看到javassisthttpcore版本由一些特定的傳遞依賴下降,javax.activation版本由一個提升。

當多個項目依賴項依賴於同一個庫並且已定義對該庫的不同版本的依賴項時,會發生這種情況。這可能很煩人,因爲通常你不能改變父POM或其依賴關係如何影響你的傳遞依賴的版本。是

Maven docs調解規則如下:

依賴調解 - 這決定了遇到的工件的多個版本時,將使用什麼版本的依賴 的。 目前,Maven 2.0僅支持使用「最接近定義」 ,這意味着它將使用與依賴關係樹中項目最接近的版本 。您可以始終通過在項目的POM中明確聲明 版本來保證。請注意,如果 兩個依賴項版本在依賴關係樹中處於相同深度 ,直到Maven 2.0.8未定義哪一個會獲勝,但自從 Maven 2.0.9它是聲明中的順序:第一個 宣告勝利。

「最接近的定義」意味着所使用的版本將是依賴關係樹中與您的項目最接近的版本,例如。如果將A,B和C的相關性定義爲A→B→C→D 2.0和A →E→D 1.0,則在構建A時將使用D 1.0,因爲從A到D到E較短。你可以明確地添加 依賴於d 2.0 A至強制使用d 2.0

的但是你可以做的是自己管理的依賴版本。這就是所謂的依賴管理和由同一文檔中指出:

依賴管理 - 這使得項目的作者直接 指定的文物使用的版本時,他們在傳遞依賴或依賴遇到 在沒有版本已指定 。在前面部分的示例中,依賴項 直接添加到A,即使它不直接被A使用。 而是,A可以在其dependencyManagement 部分中包含D作爲依賴項,並直接控制何時使用D版本,或者如果,它曾被引用。

因此,你可以添加:

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>bar</groupId> 
     <artifactId>foo</artifactId> 
     <version>1.2.3</version> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

到自己的POM,這總是會覆蓋正在通過調解依賴的傳遞依賴定義的所有版本。

相關問題