1. 程式人生 > >Maven中的dependencyManagement和dependencies區別

Maven中的dependencyManagement和dependencies區別

在Maven中dependencyManagement的作用其實相當於一個對所依賴jar包進行版本管理的管理器。

在dependencyManagement下申明的dependencies,Maven並不會去實際下載所依賴的jar包,而是

dependencyManagement中用一個Map記錄了jar的三維座標。

而被僅僅是被dependencies包裹的元素,Maven是會去倉庫實際下載所需要的jar包的,而至於需要下載什麼

版本的jar包就有兩種判斷途徑:

1:如果dependencies裡的dependency自己沒有宣告version元素,那麼maven就

會倒dependencyManagement裡面去找有沒有對該artifactId和groupId進行過版本宣告,如果有,就繼承它,如果

沒有就會報錯,告訴你必須為dependency宣告一個version

2:如果dependencies中的dependency聲明瞭version,那麼無論dependencyManagement中有無對該jar的version宣告,都以dependency裡的version為準。

pom.xml
//只是對版本進行管理,不會實際引入jar
<dependencyManagement>
      <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>3.2.7</version>
            </dependency>
    </dependencies>
</dependencyManagement>

//會實際下載jar包
<dependencies>
       <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
       </dependency>
</dependencies>
可以看到dependecies元素下的dependency裡並沒有宣告版本,這是因為在manager中已經將版本管理起來了。

比如我們在專案中需要引入一個框架A的jar包:a.jar。而A框架的作者為了實現A框架又在其pom裡面引入了spring框架,那麼問題就來了,如果我們的專案也要用到spring框架,那spring框架的版本應該以誰的為準呢?

這可能就是dependencyManagement的作用了,你可以在dependencyManagement中對spring進行版本宣告,然後你在dependencies中新增對A框架的引用,那麼實際引入的spring版本就是你在dependencyManagement中宣告的版本了。