Maven-實作篇 (4) 多模組專案

在前三篇實作我們完成了 core, desktop, web 三個專案,接下來要給大家介紹 Maven 最典型的一種應用 — 多模組專案

如上圖所示,除了在目前完成的三個專案以外,我們會再建立一個上層專案 (user-service),並且把之前的三個專案轉變為底下的模組,這麼作的好處有:

  • 只要在上層專案下一次 Maven 指令,會依序在每個子專案跑一遍
  • 集中控管整個系統中的 dependency, plugin 設定,避免每個專案有各自的定義,不易維護
  • 增加專案架構上的彈性。可以依照實際需求,把能夠共用的核心模組獨立出來,或是透過相關模組的組合來應付各種業務需求

以下就一步一步帶大家完成這個練習:

  1. 依照以下資訊,建立 Maven 專案 ( 跳過 archetype 選擇)
    • groupId: com.appx
    • artifactId: user-service
    • version: 1.0-SNAPSHOT
    • packaging: pom

  2. 打開POM.xml,在overview的tab畫面中 Modules 點擊 “Add…”,把之前三個專案就加進來,並且勾選底下的Update POM parent section in selected projects,這麼一來就連立起專案之前的階層關係了
    • 在 user-service 的 POM.xml 會看到多了 modules 的設定

    • 在底下三個專案的 POM.xml 都會看到 <parent> 的設定

  3. 把三個專案POM.xml的 <dependency> 都複製到上層 user-service 的 <dependencyManagement>裡,並移除 <version>, <scope>,因為這些資料都會從上層繼承下來,如下示意圖
    • user-service POM.xml

    • user-service-core POM.xml

  4. 把三個專案POM.xml的 <plugin> 都複製到上層 user-service 的 <pluginManagement>裡,並只留下<groupId>, <artifactId>,如下示意圖
    * desktop 專案的 shade plugin 可以考慮不往上移,因為這plugin 只有 desktop 專案自己本身會用到

    • user-service POM.xml

    • user-service-core POM.xml

  5. <dependency>中如果引用了相鄰的專案(像是 desktop, web 都使用了  core),依慣例會把 <dependency>的 <groupId> 用 ${project.groupId} 來表示

  6. 把三個專案POM.xml裡面的 <properties> 往上移到 user-service,並且使用 <property> 統一定義  <dependency> 以及 <plugin>裡的版本號,如下示意圖

  7. 最後,在user-service上執行 mvn install,確定一切運作正常!

Facebook Comments