原文出处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项目

  1. New Project

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

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

二、给Maven项目添加模块

  1. New Module

  1. 填写基本信息,jar项目同样不需要使用Maven模板搭建

  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

  1. 接下来耐心的等待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>

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

  1. 增加core与util的依赖

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

admin与core、util的依赖链

多模块项目的构建与发布

打包

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

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

发布

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


-END-

使用maven构建多模块项目,分块开发的更多相关文章

  1. 使用Maven构建多模块项目

    [转] 使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务 ...

  2. (转)Maven学习总结(八)——使用Maven构建多模块项目

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(八)——使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为doma ...

  3. Maven构建多模块项目

    使用Maven构建多模块项目 转自:http://www.cnblogs.com/xdp-gacl/p/4242221.html 在平时的Javaweb项目 开发中为了便于后期的维护,我们一般会进行分 ...

  4. Maven学习总结(8)——使用Maven构建多模块项目

    Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层). ...

  5. Maven学习(五)使用Maven构建多模块项目

    使用Maven构建多模块项目 一般的web项目构成: 建立解决方案目录parent 首先使用命令进入到我们需要建立maven项目的目录: mvn archetype:generate -DgroupI ...

  6. Maven 梳理 - 使用Maven构建多模块项目

    多模块实际案例 project |--business (核心业务) |--business-api |--business-service |--business-message |--busine ...

  7. 【Maven】使用Maven构建多模块项目

    Maven多模块项目 Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理.尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定 ...

  8. Maven学习8-使用Maven构建多模块项目

    在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问 层).service(业务逻辑层).web(表现层),这样分层 ...

  9. Maven学习总结(八)——使用Maven构建多模块项目

    在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),这样分层之 ...

随机推荐

  1. WIN10在loadrunner安装或path4插件安装时遇到的管理员阻止程序运行---解决方案(可用)

    方法1:关闭用户账户控制1.“win+x”进入控制面板,选择安全性与维护,在左侧更改windows smartscreen筛选器设置,选择"不执行任何操作",单击确定即可.2.“w ...

  2. hbase总结~hbase配置和使用

    Base配置和使用文档......................................................................................... ...

  3. CentOS 7升级Python到3.5后yum出错

    CentOS 7升级Python到3.5后,我跟以前CentOS 6一样,在/usr/bin/python创建了一个指向Python 3的软连接,然后将/usr/bin/yum的顶部的: !/usr/ ...

  4. Py西游攻关之RabbitMQ、Memcache、Redis

    Py西游攻关之RabbitMQ.Memcache.Redis   RabbitMQ 解释RabbitMQ,就不得不提到AMQP(Advanced Message Queuing Protocol)协议 ...

  5. Vue 的生命周期图

  6. 20. pt-show-grants

    pt-show-grants -h 192.168.100.101 -P 3306 -u admin -p admin 也可以delete,revoke,flush privileges , 用的不多 ...

  7. rabbitmq初学之连接测试

    Login was refused using authentication mechanism PLAIN. 用户名或密码没有设置,或者错误

  8. 【Mybatis】MyBatis配置文件的使用(二)

    本例在[Mybatis]MyBatis快速入门(一)基础上继续学习XML映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properti ...

  9. MySQL安装及后续配置

    rpm -qa | grep mysql  检查已安装的mysql版本 rpm -e --nodeps mysql-libs-5.1.71 卸载 tar -zxvf MySQL.tar.gz 解压 安 ...

  10. MYSQL 开发总结

    1.mysql中,VARCHAR(N)中的N代表的是字符数,而不是字节数.例如VARCHAR(255)表示可以保存255的中文 2.过大的长度会消耗更多的内存.VARCHAR(N),存储时是按照数据实 ...