簡體   English   中英

maven 如何確定傳遞依賴的版本?

[英]how does maven determine the version of transitive dependencies?

我正在使用 maven 構建一個 java 項目,我注意到在其中一個子項目中,包含了 jsonwebtoken 0.7.0。

https://github.com/WebGoat/WebGoat/blob/develop/webgoat-lessons/challenge/pom.xml

webgoat-pom

然后從 maven repo ( https://repo1.maven.org/maven2/io/jsonwebtoken/jjwt/0.7.0/jjwt-0.7.0.pom ),jsonwebtoken 0.7.0 依賴於 jackson-databind v2.8.2 ;

在此處輸入圖片說明

但是,當我從 maven 調試日志中跟蹤時,jackson-databind v2.10 實際上是由 maven 拉取的。

我知道如果在 POM 中沒有明確定義組件版本,maven 將默認為最新,但是,在上述情況下,為什么 maven 仍然選擇將版本覆蓋為最新?

謝謝!

如果在多個地方添加了一個依賴項,Maven 會采用:

  • 在層次結構中更接近您的 pom.xml(傳遞依賴與傳遞依賴的傳遞依賴)
  • 如果深度相同 - 它需要第一次出現。

為了保證采用哪個版本,您需要在<dependencyManagement>部分聲明它。 這會覆蓋傳遞依賴項中聲明的任何內容。

如果在 POM 中未明確定義組件版本, maven 將默認為最新

不,您不能在沒有明確版本的情況下定義依賴項。 Maven 支持范圍,但它們被認為是不好的做法,因為這會導致不可重復的構建。

我猜你在某個地方有一個需要 jackson-databind 2.10 的依賴項。 更高版本強制 maven 覆蓋 jsonwebtoken 所需的 jackson-databind 2.8.2。

但是,如果您在另一個版本的項目中明確包含 jackson-databind,則該版本會覆蓋傳遞依賴項中的版本。

如果你使用eclipse,你可以查看“Dependency Hierarchy.”。 例如,如果您明確包含 jackson-databind:

在此處輸入圖片說明

.. 在這里,如果您有兩個依賴項,它們都包含具有不同版本的傳遞依賴項(在這種情況下,spring-aop:spring-boot-starter-security 需要 5.0.4.RELEASE,但由於 spring- boot-starter-weg 到 5.1.5.RELEASE):

在此處輸入圖片說明

暫無
暫無

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

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