1

發佈了一些類似的問題here.但是沒有答案。爲什麼傳遞依賴不包括我的最終戰爭?

我多模塊Maven項目

當我運行mvn dependency:tree, 我看到下面的

[INFO] ------------------------------------------------------------------------ 
[INFO] Building Service 2.2.22-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 

[INFO] +- org.apache.httpcomponents:httpclient:jar:4.3.2:compile 
[INFO] | \- commons-codec:commons-codec:jar:1.6:compile 

[INFO] ------------------------------------------------------------------------ 
[INFO] Building common 2.2.22-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] +- com.mycompany.project:jar:2.1.115:compile 
      +- commons-httpclient:commons-httpclient:jar:3.1:compile 
[INFO] | | \- commons-codec:commons-codec:jar:1.2:compile 

沒有其他的配置,以排除任何庫在pom.xml中完成。 在我最後的war/WEB-INF/lib

我看到commons-codec-1.6.jarcommons-httpclient-3.1.jarhttpclient-4.3.2.jar。 但我沒看到commons-codec-1.2.jar。這是爲什麼?

回答

2

而是既包括公共編解碼器罐,這可能會導致衝突和問題,Maven的dependency mediation選擇commons-codec-1.6.jar

  • 依賴調解 - 這個決定將是什麼版本的依賴 的在遇到多個版本的工件時使用。 目前,Maven 2.0僅支持使用「最接近定義」 ,這意味着它將使用與依賴關係樹中項目最接近的版本 。您可以始終通過在項目的POM中明確聲明 版本來保證。請注意,如果 兩個依賴項版本在依賴關係樹中處於相同深度 ,直到Maven 2.0.8未定義哪一個會獲勝,但自從 Maven 2.0.9它是聲明中的順序:第一個 宣告勝利。
    • 「最接近的定義」意味着使用的版本 將是依賴關係樹中您的項目最接近的版本,例如 。如果將A,B和C的依賴關係定義爲A→B→C→D和A→E→D 1.0,則在構建A時將使用D 1.0,因爲從A到D的路徑通過E更短。你可以明確地 添加依賴關係到d 2.0 A至強制使用d 2.0