簡體   English   中英

Maven解析依賴項的版本

[英]Maven resolving versions of dependencies

如果模塊的兩個依賴關系都有一個共同的depdnendency但在poms中指定了不同的版本,那么在構建模塊時使用哪個版本?

例如

        Artifact-A
        /       \
       /         \
      /           \
Artifact-B      Artifact-C
      \           /
 1.6.0 \         / 1.8.0
        \       /
        Artifact-D

同樣在下面詳述的場景中,Artifact-C會使用什么版本的Artifact-C?

    Artifact-A
        |      \
        |       |
        |       |
    Artifact-B  | 1.60.0
        |       |
 1.62.0 |       |
        |      /
    Artifact-C

如果您可以提供或鏈接到maven如何解析這些版本的簡明探索。

請參閱依賴機制簡介

通過傳遞依賴性,包含的庫的圖形可以快速增長。 出於這個原因,還有一些額外的功能將限制包含哪些依賴項:

  • 依賴關系中介 - 確定在遇到工件的多個版本時將使用哪個版本的依賴關系。 目前,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更短。 您可以在A中向D 2.0明確添加依賴項以強制使用D 2.0

這意味着對於您的第一個示例(並啟動Maven 2.0.9),如果工件B在工件C之前被聲明為A中的依賴項,如下所示:

<dependency>
   <groupId>groupB</groupId>
   <artifactId>projectB</artifactId>
</dependency>
<dependency>
   <groupId>groupC</groupId>
   <artifactId>projectC</artifactId>
</dependency>

然后選擇項目B中聲明的依賴關系D.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM