使用maven构建多模块项目,分块开发

 

在多人使用Maven协做开发项目时,尤为是稍微上点规模的项目,每一个RD的工做都细分到具体功能和模块,有些模块甚至还要单独部署。git

咱们假设有这样一个商城项目,包括如下几个模块:github

  • 商城前台(shop)
  • 管理后台(admin)
  • 数据库交互模块(dao)
  • 通用业务模块(service)
  • 接口模块(api)
  • 通用工具(util)

其中shop和admin须要单独部署,dao、service、util你可能想要一些经验丰富的人来维护,若是使用一个应用来管理的话,全部的功能和模块都会耦合在一块儿,全部人均可以随意修改代码,这显然不是咱们所指望的。web

并且使用一个应用来管理的话,任何一个点的代码有变动,整个项目就须要从新build,使用模块化开发的另外一个好处是若是dao的代码被修改,只须要从新build dao模块就能够了。web模块能够build成war,dao、service、util等能够build成jar,只须要配置好依赖关系,就能够实现模块间的解耦合。这样的设计才是遵循“高内聚,低耦合”设计原则的。数据库

咱们如何进行模块化开发呢?

咱们使用上面的例子进行演示,先进行合理的优化,咱们但愿dao和service做为通用的底层工具来使用,把它们合并成一个核心模块(core),build成core.jar,简单的Maven模块化项目结构以下:api

---------- 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模块。接下来咱们按照上述肯定的结构来搭建项目结构。ruby

使用IDEA来建立Maven多模块项目

1、建立一个普通Maven项目

  1. New Project

image

  1. 填写基本信息,这里使用ipr做为项目描述文件

image

  1. 普通Maven项目不须要使用Maven模板搭建

image

2、给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>

3、给Maven项目添加web模块

  1. 建立一个module,并选中“Create from archetype”选项,同时maven模板选择webapp

image

  1. 接下来耐心的等待maven帮你建立好module,模块信息已经被添加
<modules>
    <module>mall-util</module> <module>mall-web-admin</module> </modules>

目录结构以下:app

image

pom:webapp

<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>

4、添加模块间的依赖关系

  1. 增长core与util的依赖

image

  1. 增长admin与core的依赖关系

image

admin与core、util的依赖链maven

image

多模块项目的构建与发布

打包

image

全部在root项目中进行的构建都会传递到模块中,例如root中的package会打包整个项目,当文件有变更时会进行从新聚合,其余命令同理。模块中的package只会打包当前模块。ide

使用source:jar命令会将源码打包。

发布

web模块能够单独部署也可聚合部署。

 

 

相关文章
相关标签/搜索