本博文出自于:http://blog.csdn.net/liutengteng130/article/details/47000217    感谢!

为了防止传递依赖,我们各个模块之间尽量用直接依赖的方式。本篇文章介绍多模块化开发,我们做过Maven项目的都知道,我们的项目一般都是分模块的,每个模块都会对应着一个POM.xml文件,它们之间通过继承和聚合(也称多模块,multi-module)相互关联。

我们换另一种思路想想,那么我们能不能一个项目就用一个模块。这样开起来很方便,简单明了,那么做起来呢,接下来我们分析一下。

假设我们有这么一个项目,整个项目构建一个war包,而每一层放到各自的Package里面。如下:

Itoo-Exam

com.tgb.itoo.exam.dao  -----负责与数据库的交互,封装了hibernate的交互类

com.tgb.itoo.exam.service----负责处理业务逻辑,放Service接口及其实现类

com.tgb.itoo.exam.web-------负责与客户端的交互,主要放action/controller,jsp等等

com.tgb.itoo.exam.util--------工具类

那么随着我们项目的扩大,Maven项目也会越来越大,那么会遇到下面的几个问题:

1、首先build整个项目的时间越来越长,尽管你一直在web层工作,但你不得不build整个项目

2、模块化体现不出来,如果我们只负责维护某个模块,因为我们所有的模块都在一个war包中,那么我们可以随意修改其他模块(权限的控制),导致版本管理混乱,冲突。同时因为模块太多,太大,不好维护。

很多人都在同时修改这个war包,将导致工作无法顺利进行。

3、pom.xml本来是可以继承、复用的,但是如果我们新建一个项目,只能依赖于这个war包,那么会把这个war包的相关的前台的东西依赖过来,导致项目管理混乱。

这样的管理是混乱的,没有遵守一个设计模式原则:“高内聚,低耦合”。相反在代码内部,所有的东西都耦合在了一起。因此我们需要划分模块。

另外,随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身变得越来越复杂,设计人员开始采用各种方式进行开发,于是就有了我们的分层架构、分层模块来提高代码的清晰和重用。从而实现了系统内部的高内聚、低耦合。

实际上我们项目的包结构:

Itoo-root (pom.xml pom包)

Itoo-base-parent(pom.xml pom包)

Itoo-base(pom.xmljar包)

Itoo-tool(pom.xmljar包)

Itoo-exam-parent (pom.xml pom包)

Itoo-exam-api        (pom.xml jar包)

Itoo-exam-student-core  (pom.xml jar包)

Itoo-exam-student-web  (pom.xml war包)

Itoo-exam-student-ear   (pom.xml ear包)

如上关系图,pom包的全是父项目,用来管理子项目的jar包。parent里面聚合了很多子项目。

模块的依赖关系:

Itoo-base--->itoo-tool

Itoo-exam-api-->itoo-base

Itoo-exam-student-core--->itoo-exam-api

Itoo-exam-student-web--->itoo-exam-api

模块化的好处

1、方便重用,当我们再开发一条teacher线的时候,我们只需要引用itoo-base,itoo-exam-api,这些包都是复用的,称为我们平台复用的基础类库,供所有的项目使用。这是模块化最重要的一个目的。

2、划分了模块,包之间的依赖关系非常清晰,包的版本管理也非常清晰,不用再到一个混乱的pom中修改自己的配置了。

3、灵活性。比如我们这些公共的jar包,itoo-base,itoo-tool,itoo-exam-api等这些jar包,我们不需要再当源码,只需要deploy到nexus,其他人从nexus下载即可。代码的可维护性、可扩展性好,并且保证了项目独立性与完整性。

4、build项目的时候,只需要build自己所需要的项目,不仅节省时间而且结构清晰。

5、上篇文章写得DependencyManagement与dependencies,父项目中管理jar包版本。使得整个项目的测试版本与发布版本一致。

使用模块化配置,复用性强,防止pom变得过于庞大,方便构建;针对项目的管理更方便,每一个模块都是独立的,抽象出一个父类来管理第三方jar的版本,开发人员只需要开发自己的线,其他的都不用管,灵活;基于此种基础我们还可以做分布式。

上面提到了我们用父项目聚合子项目,子项目继承父项目。下篇博客我们继续介绍Maven模块的聚合和继承。

转载于:https://www.cnblogs.com/zlslch/p/6033659.html

【转】Maven实战(八)---模块划分相关推荐

  1. Maven最佳实践:划分模块

    所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...

  3. java项目常见业务模块,C6 架构系列——Maven多模块划分和结构

    一.传统Java Web项目 # 传统Java Web项目 这类项目常见组织方式就是在一个项目里面,放置 src\[java文件] resources\[配置文件] webapp\[js/jsp/cs ...

  4. 18.1 项目分析与模块划分(项目设计)-《SSM深入解析与项目实战》

    最近有些朋友私聊我,说实战部分多久发,我想了想,如果按照<SSM深入解析与项目实战>那个专栏速度来更新,估计要明年年底了.所以新开了一个专栏,给有实战部分需求的朋友来进行订阅.我会尽快将该 ...

  5. 交易系统模块划分,模块拆分,设计,重构实战.状态

    父文章 技术设计金字塔  包含了实体设计文章 相关文章 如何梳理和重构_含复杂性度量 相关文章,代码级:  如何写可维护的代码 - 万物ddd ddd primitive . 封装,对象来实现可维护代 ...

  6. Maven实战(四)——基于Maven的持续集成实践

    相信很多读者和我一样,最早接触到持续集成的概念是来自Martin的著名文章<持续集成>,该文最早发布于2000年9月,之后在2006年进行了一次修订,它清晰地解释了持续集成的概念,并总结了 ...

  7. Maven实战05_背景案例学Maven模块化

    1:简单的账户注册服务 注册互联网账户是日常生活中再熟悉不过的一件事,作为一个用户,注册账户的时候需要进行以下操作,提供以下信息. 提供一个未被使用的帐号ID 提供一个未被使用的email地址. 提供 ...

  8. 「每日分享」Maven实战

    点击上方"java全栈技术"关注,每天学习一个java知识点 原创: Aisky 一.初识Maven Maven是Apache组织中的一个很成功的开源项目,Maven主要服务于基于 ...

  9. Maven实战系列文章目录

    Maven实战(一)安装与配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven ...

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

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...

最新文章

  1. C++中extern的使用
  2. 无法安装此计算机不存在英特尔,win2008serverr2intel网卡驱动无法安装不存在英特尔PRO适配器的解决方法...
  3. 340亿美元买下红帽!IBM百年以来最大手笔,云市场翻身之战!
  4. halcon的算子清点: Chapter 2-3-4 控制、开发、文件操作
  5. 从玉农业智能蔬菜技术 农业大健康·林裕豪:中国金控斥资打造
  6. MFC中char*,string和CString之间的转换
  7. springMVC使用与生成序列号
  8. distcc 链接失败_distcc分布式编译时,icu host程序偶现编译失败原因分析
  9. double类型数值比较的坑
  10. yolov3从头实现(五)-- yolov3网络块
  11. 集合之五:Set接口
  12. SoapUI简易教程-接口模拟
  13. web一键返回顶端html代码,CSS-返回顶部代码_html/css_WEB-ITnose
  14. html缩放背景不缩放_如何在缩放通话中静音
  15. arduino GPS 经纬度解析(C语言)
  16. android——java.lang.IllegalStateException: Fatal Exception thrown on Scheduler
  17. uoj140 【UER #4】被粉碎的数字
  18. 计算机二级表格题的数据,计算机二级Excel表格题库答案(解题步骤)
  19. 哔哩哔哩前端笔试(卷1)
  20. 线程的状态 - Java

热门文章

  1. 【Linux】Linux 标准目录结构
  2. scriptalert(1)/script
  3. 别再拿div+css误导人了
  4. php软件开发--nginx服务器(待补充)
  5. 超级终端软件测试工程师,超级终端是否可用来测试 RS485?
  6. MongoDB 复制集和分片的理解
  7. Oracle体系概要
  8. linux使用find命令_如何在Linux中使用FIND
  9. 机器学习必读之路必读_2017年必读的9个游戏故事
  10. rfc 查看工具_使用技术RFC作为管理工具的6课