Maven多模組之父子關係
Maven多模組專案,適用於一些比較大的專案,通過合理的模組拆分,實現程式碼的複用,便於維護和管理。尤其是一些開源框架,也是採用多模組的方式,提供外掛整合,使用者可以根據需要配置指定的模組。
Maven多模組(pom)
1.1 父模組建立
先建立個簡單的空的Maven Project作為父專案
1.2 子模組建立
重新建立一個Maven Project作為子專案
1.3 父子模組(繼承關係)
注意:此時父子模組為兩個獨立的專案。
步驟1:子專案中加入 <parent>
節點,傳入父專案完整座標。
步驟2:將子專案中的依賴都註釋掉。
注意:此時子專案中的沒有了Maven Dependencies。
步驟3:將子專案註釋的依賴新增到父專案中。
注意:此時子專案中的依賴又添加回來了。
這種直接在父工程中加入 <dependencies>
的方式,讓子工程可以直接複用依賴,但是缺點是 所有的子專案無條件繼承父工程所有依賴 ,所以如果要在父工程中新增依賴只能針對非常通用的依賴。
在父專案中再新增一個依賴。
子專案同時也繼承了新新增的依賴。
那如果不想無條件繼承父工程的所有依賴,而想讓子專案自行選擇需要的依賴又該如何做呢?
1.4 dependencyManagement
在父專案中用 <dependencies>
節點包裹 <dependencies>
節點,並且新增的是 完整的依賴座標(gav) 。
此時子專案中的Maven Dependencies又會消失,說明新增 <dependencies>
節點後,它並不負責相關依賴的下載。
子專案加入相應同樣依賴,注意不要加 version
( version
繼承自父專案),需要什麼樣的依賴就宣告什麼。
特別注意,如果父專案提供了 groupid
和 version
,則刪除子專案座標中的 groupid
和 version
,直接繼承父專案相關座標。
dependencyManagement
的作用:依賴版本管理器
- 本身並不下載任何依賴,只是管理依賴的版本。依賴的下載依然需要單獨的
<dependencies>
(不加dependencyManagement
,額外寫一個)去做 - 如果
<dependencies>
中的<dependency>
沒有宣告版本號(version
),maven會去尋找有無對應的dependencyManagement
,當前工程沒有就會向上找父工程。如果找到就以dependencyManagement
中對應依賴宣告的version
為準,否則報錯version is missing。