maven專案中dependency和dependenciesManagement的區別
今天是新公司的入職第8天,一週多時間了.專案經理讓我自己寫一個介面,接收兩個引數,返回一個json資料,自己架以springmvc的框架,一個url路徑訪問,可以獲取到一個json資料.
就是建立一個maven的war檔案,匯入spring所依賴的jar包,尤其是spring-context,其中封裝了註解的類,不然進行@Controller註解的時候是不能導包的.本來是引用的之前的一個專案中的jar的座標,所以基本是這樣的,屬性中新增的spring的版本號就不顯示了..
<dependencyManagement> <!--spring的核心包--> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-content</artifactId> <version>${spring-version}</version> </dependency> </dependencies> </dependencyManagement>
但是這樣就行測試的時候,註解是不能正確導包的,仔細找了好久,發現並沒有所要依賴的spring的jar包在裡面,所以沒有註解是很正常的存在了..
後來將<dependencyManage>的標籤拿掉,直接依賴的時候,就看到了eclipse中的buildworkspace在build,證明一點我們的操作是有效果的,是在執行操作的.而且剛剛報紅的註解都已經好了...可算是度過了一關,其實,後面還有九九八十一難呢,任重道遠.
總結:
dependencyManagement其實只是一個管理jar的作用,是管理jar的版本,其他他的什麼作用都沒有,只是定義找到該jar的三維座標,並不是真正的去執行下載的jar的功能.
但是jar的版本宣告是有兩種方式的,
1,在dependencies中的依賴中如果沒有宣告jar的版本,就到dependenciesManage中去找,找到就使用,沒有就報錯
2,在dependencies中宣告jar的版本,則使用該版本,不管在dependenciesManage中有沒有宣告jar的version,都以該jar的版本為主.
其實還有一個知識點,是比較繞人的,但是也是個大坑,
我們在專案中需要引入一個框架S的jar包,S.jar.而S框架的開發者為了實現S框架又在pom中引入H框架,如果我們在專案中也使用了H框架,那麼H框架的版本是什麼呢?此時就是dependenciesManage的作用,不管怎樣,在dependenciesManage中只要有版本的宣告,就使用dm中的版本,就是這麼簡單粗暴!!!