原文出處:http://www.yund.tech/zdetail.html?type=1&id=79dec7c1d56292419acec78afcbc1095
作者:jstarseven
在多人使用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項目
- New Project
- 填寫基本信息,這里使用ipr作為項目描述文件
- 普通Maven項目不需要使用Maven模板搭建
二、給Maven項目添加模塊
- New Module
- 填寫基本信息,jar項目同樣不需要使用Maven模板搭建
- 這個時候就可以看到,我們所添加的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>
- 變更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模塊
- 創建一個module,並選中“Create from archetype”選項,同時maven模板選擇webapp
- 接下來耐心的等待maven幫你創建好module,模塊信息已經被添加
<modules>
<module>mall-util</module> <module>mall-web-admin</module> </modules>
目錄結構如下:
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>
四、添加模塊間的依賴關系
- 增加core與util的依賴
- 增加admin與core的依賴關系
admin與core、util的依賴鏈
多模塊項目的構建與發布
打包
所有在root項目中進行的構建都會傳遞到模塊中,例如root中的package會打包整個項目,當文件有變動時會進行重新聚合,其他命令同理。模塊中的package只會打包當前模塊。
使用source:jar
命令會將源碼打包。
發布
web模塊可以單獨部署也可聚合部署。
-END-