1. 程式人生 > >使用maven搭建多模組專案

使用maven搭建多模組專案

我們為什麼要進行模組化開發?

在多人使用Maven協作開發專案時,尤其是稍微上點規模的專案,每個RD的工作都細分到具體功能和模組,有些模組甚至還要單獨部署。

我們假設有這樣一個商城專案,包括以下幾個模組:

  • 商城前臺(shop)
  • 管理後臺(admin)
  • 資料庫互動模組(dao)
  • 通用業務模組(service)
  • 介面模組(api)
  • 通用工具(util)

其中shop和admin需要單獨部署,dao、service、util你可能想要一些經驗豐富的人來維護,如果使用一個應用來管理的話,所有的功能和模組都會耦合在一起,所有人都可以隨意修改程式碼,這顯然不是我們所期望的。

而且使用一個應用來管理的話,任何一個點的程式碼有變更,整個專案就需要重新build,使用模組化開發的另一個好處是如果dao的程式碼被修改,只需要重新build dao模組就可以了。web模組可以build成war,dao、service、util等可以build成jar,只需要配置好依賴關係,就可以實現模組間的解耦合。這樣的設計才是遵循“高內聚,低耦合”設計原則的。

我們如何進行模組化開發呢?

我們使用上面的例子進行演示,先進行合理的優化,我們希望dao和service作為通用的底層工具來使用,把它們合併成一個核心模組(core),build成core.jar,簡單的Maven模組化專案結構如下:

---------- mall         //頂級專案
   |------ pom.xml      //packaging = pom
   |------ mall-util    //通用工具
   |  |--- pom.xml      //packaging = jar
   |------ mall-core    //核心模組
   |  |---
pom.xml //packaging = jar |------ mall-web-api //介面模組 | |--- pom.xml //packaging = war |------ mall-web-admin//管理後臺 | |--- pom.xml //packaging = war |------ mall-web-shop//商城前臺 | |--- pom.xml //packaging = war

這些模組中api、admin、shop均是可以單獨部署的web應用,相互之間沒有依賴關係,但都依賴於core模組,而core模組依賴於util模組。接下來我們按照上述確定的結構來搭建專案結構。

使用IDEA來建立Maven多模組專案

一、建立一個普通Maven專案

  1. New Project

image

  1. 填寫基本資訊,這裡使用ipr作為專案描述檔案

image

  1. 普通Maven專案不需要使用Maven模板搭建

image

二、給Maven專案新增模組

  1. New Module

image

  1. 填寫基本資訊,jar專案同樣不需要使用Maven模板搭建

image

  1. 這個時候就可以看到,我們所新增的module已經被引入到parent的pom檔案裡了
<groupId>com.mall</groupId>
<artifactId>mall</artifactId>
<packaging>pom</packaging> //打包方式為pom
<version>1.0-SNAPSHOT</version>

<modules>
    <module>mall-util</module>
</modules>
  1. 變更util模組的構建方式為jar
<parent>
    <artifactId>mall</artifactId>
    <groupId>com.mall</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<packaging>jar</packaging> //打包方式為jar
<artifactId>mall-util</artifactId>

三、給Maven專案新增web模組

  1. 建立一個module,並選中“Create from archetype”選項,同時maven模板選擇webapp

image

  1. 接下來耐心的等待maven幫你建立好module,模組資訊已經被新增
<modules>
    <module>mall-util</module>
    <module>mall-web-admin</module>
</modules>

目錄結構如下:

image

pom:

<parent>
    <artifactId>mall</artifactId>
    <groupId>com.mall</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mall-web-admin</artifactId>
<packaging>war</packaging>
<name>mall-web-admin</name>
<url>https://github.com/beiyoufx</url>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <finalName>mall-web-admin</finalName>
</build>

四、新增模組間的依賴關係

  1. 增加core與util的依賴

image

  1. 增加admin與core的依賴關係

image

admin與core、util的依賴鏈

image

多模組專案的構建與釋出

打包

image

所有在root專案中進行的構建都會傳遞到模組中,例如root中的package會打包整個專案,當檔案有變動時會進行重新聚合,其他命令同理。模組中的package只會打包當前模組。

使用source:jar命令會將原始碼打包。

釋出

web模組可以單獨部署也可聚合部署。