zoukankan      html  css  js  c++  java
  • 【转】Maven实战(八)---模块划分

    本博文出自于: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/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模块的聚合和继承。

  • 相关阅读:
    [20170706]SQL Server事务复制订阅端,job不小心被删,修复
    [20170629]带过滤的复制项UI操作导致订阅全部初始化问题
    自动创建数据库镜像,证书交换
    “RESOURCE MONITOR“CPU占用特别高
    索引视图导致死锁
    Percona TokuDB
    从MySQL 5.5迁移到Mariadb 10.1.14
    SQL Server 2014新特性:其他
    SQL Server 2014新特性:分区索引重建
    SQL Server 2012 新特性:其他
  • 原文地址:https://www.cnblogs.com/zlslch/p/6033659.html
Copyright © 2011-2022 走看看