为了防止传递依赖,我们各个模块之间尽量用直接依赖的方式。本篇文章介绍多模块化开发。我们做过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-------负责与client的交互。主要放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模块的聚合和继承。

Maven实战(八)---模块划分的更多相关文章

  1. Ionic2实战——按模块划分app 创建多module

    http://www.jianshu.com/p/d94324b722af 背景 用ionic2开发过一两个小功能的朋友都会发现,每新建一个页面都需要在\src\app\app.module.ts中添 ...

  2. 学习笔记——Maven实战(八)常用Maven插件介绍(下)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  3. 【转】Maven最佳实践:划分模块

    转自:http://juvenshun.iteye.com/blog/305865 “分天下为三十六郡,郡置守,尉,监” —— <史记·秦始皇本纪> 所有用Maven管理的真实的项目都应该 ...

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

    http://juvenshun.iteye.com/blog/305865 ************************************* "分天下为三十六郡,郡置守,尉,监& ...

  5. 【转】Maven实战(九)---模块聚合和继承

    原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47001831   感谢! 类之间有聚合和继承关系,Maven也具备这样的设计原 ...

  6. angularJs项目实战!01:模块划分和目录组织

    近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap ...

  7. (转)Maven最佳实践:划分模块

    “分天下为三十六郡,郡置守,尉,监” —— <史记·秦始皇本纪> 所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块 ...

  8. Maven实战(八)——常用Maven插件介绍(下)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

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

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

  10. MAVEN最佳实践:模块划分

    转自:http://juvenshun.iteye.com/blog/305865 所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作 ...

随机推荐

  1. nj08---process、console

    概念:所有属性都可以在程序的任何地方访问,即全局变量.在JavaScript中,通常window是全局对象,而Node.js的全局对象是global,所有全局变量都是global对象的属性,如:con ...

  2. js 实现 水仙花数

    水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) <!DOCTYPE html><html ...

  3. python3.x学习笔记2(基础知识)

    1.元组元组其实跟列表差不多,也是存一组数,只是它一旦创建,便不能在修改,所以又叫只读列表语法:names =('shgd','sjdh') 它只有两个方法,一个是count,一个是index 2.字 ...

  4. 使用Onedrive

    买了个某捷的大硬盘,于是发现比较坑,非要用云存储才能获得额外200G.于是费了一个多小时.不过学习到了很多. 首先硬盘下会给出对应的exe文件,点击运行就可以. 之后注册希捷的账号,以及微软的账号. ...

  5. 用LinkedList模拟Stack功能

    集合体系在Java中比较重要,整个集合体系是在JDK1.2版本后出现,Collection作为整个体系的顶层,拥有整个体系通用的功能.对于其下面的小弟,也是各有千秋.下面就一道面试题来看看Linked ...

  6. IDEA項目配置404

        本人使用的版本是 Intellij IDEA 2017.1 最近刚学习使用 Intellij IDEA 开发项目,就遇到了坑爹的问题,部署一个简单的 ssh 项目,tomcat启动正常,没有任 ...

  7. 运维派 企业面试题3 为上题中的 "十个随机字母_test.html" 文件 更名

    Linux运维必会的实战编程笔试题(19题) 企业面试题3 #将试题2中创建的文件名uopiyhgawe_test.html# test-->修改为omg,html-->HTML 方法一: ...

  8. Python对象的循环引用问题

    目录 Python对象循环引用 循环引用垃圾回收算法 容器对象 生成容器对象 追踪容器对象 结束追踪容器对象 分代容器对象链表 何时执行循环引用垃圾回收 循环引用的垃圾回收 循环引用中的终结器 pyt ...

  9. 紫书 例题 10-15 UVa 1638(递推)

    从大到小安排杆子 分三种情况 (1)插到最左边,那么左边看到了杆子会多一个 (2)插到最右边,那么右边看到了杆子会多一个 (3)插到中间边,那么不影响左边和右边看到的杆子数 具体看代码 #includ ...

  10. Maven学习总结(21)——Maven常用的几个核心概念

    在使用Maven的过程中,经常会遇到几个核心的概念,准确的理解这些概念将会有莫大的帮助. 1. POM(Project Object Model)项目对象模型 POM 与 Java 代码实现了解耦,当 ...