在前三篇實作我們完成了 core, desktop, web 三個專案,接下來要給大家介紹 Maven 最典型的一種應用 — 多模組專案
如上圖所示,除了在目前完成的三個專案以外,我們會再建立一個上層專案 (user-service),並且把之前的三個專案轉變為底下的模組,這麼作的好處有:
- 只要在上層專案下一次 Maven 指令,會依序在每個子專案跑一遍
- 集中控管整個系統中的 dependency, plugin 設定,避免每個專案有各自的定義,不易維護
- 增加專案架構上的彈性。可以依照實際需求,把能夠共用的核心模組獨立出來,或是透過相關模組的組合來應付各種業務需求
以下就一步一步帶大家完成這個練習:
- 依照以下資訊,建立 Maven 專案 ( 跳過 archetype 選擇)
- groupId: com.appx
- artifactId: user-service
- version: 1.0-SNAPSHOT
- packaging: pom
- 打開POM.xml,在overview的tab畫面中 Modules 點擊 “Add…”,把之前三個專案就加進來,並且勾選底下的Update POM parent section in selected projects,這麼一來就連立起專案之前的階層關係了
- 在 user-service 的 POM.xml 會看到多了 modules 的設定
- 在底下三個專案的 POM.xml 都會看到 <parent> 的設定
- 把三個專案POM.xml的 <dependency> 都複製到上層 user-service 的 <dependencyManagement>裡,並移除 <version>, <scope>,因為這些資料都會從上層繼承下來,如下示意圖
- user-service POM.xml
- user-service-core POM.xml
- 把三個專案POM.xml的 <plugin> 都複製到上層 user-service 的 <pluginManagement>裡,並只留下<groupId>, <artifactId>,如下示意圖
* desktop 專案的 shade plugin 可以考慮不往上移,因為這plugin 只有 desktop 專案自己本身會用到- user-service POM.xml
- user-service-core POM.xml
- <dependency>中如果引用了相鄰的專案(像是 desktop, web 都使用了 core),依慣例會把 <dependency>的 <groupId> 用 ${project.groupId} 來表示
- 把三個專案POM.xml裡面的 <properties> 往上移到 user-service,並且使用 <property> 統一定義 <dependency> 以及 <plugin>裡的版本號,如下示意圖
- 最後,在user-service上執行 mvn install,確定一切運作正常!
Facebook Comments