Maven中的dependencyManagement和dependencies區別
阿新 • • 發佈:2019-01-25
在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為準。
可以看到dependecies元素下的dependency裡並沒有宣告版本,這是因為在manager中已經將版本管理起來了。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>
比如我們在專案中需要引入一個框架A的jar包:a.jar。而A框架的作者為了實現A框架又在其pom裡面引入了spring框架,那麼問題就來了,如果我們的專案也要用到spring框架,那spring框架的版本應該以誰的為準呢?
這可能就是dependencyManagement的作用了,你可以在dependencyManagement中對spring進行版本宣告,然後你在dependencies中新增對A框架的引用,那麼實際引入的spring版本就是你在dependencyManagement中宣告的版本了。