Maven实战(八)---模块划分

         为了防止传递依赖,我们各个模块之间尽量用直接依赖的方式。本篇文章介绍多模块化开发,我们做过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/controllerjsp等等

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

 

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

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

 

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

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

 

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

 

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

 

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


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

 

Itoo-root (pom.xml pom)

Itoo-base-parent(pom.xml pom)

Itoo-basepom.xmljar包)

Itoo-toolpom.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包,我们不需要再当源码,只需要deploynexus,其他人从nexus下载即可。代码的可维护性、可扩展性好,并且保证了项目独立性与完整性。


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


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

 

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

 

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

你可能感兴趣的:(Maven实战(八)---模块划分)