Maven的聚合特性能够把项目的各个模块聚合在一起构件,而Maven的继承特性能够帮助抽取各个模块相同的依赖和插件等配置,简化POM的同时,还能促进各个模块配置的一致性。

    1.聚合
    为了能使用一条命令构建两个模块A,B,需要创建一个新的模块G,然后通过模块构建整个项目的所有模块。G本身就是一个Maven项目,它必须有自己的POM,不过同时作为一个聚合项目,POM的packaging必须是pom。如下,否则无法构建。
    <packaging>pom</packaging>
    <modules>
        <module>modelA</module>
        <module>modelB</module>
    </modules>
    </modules>:实现聚合的最核心配置。用户可以通过在一个打包方式为pom的Maven项目中声明任意数量的module元素来实现模块的聚合。
    一般情况,模块所处的目录名称应该与其artifactId一直。不过不是硬性要求。推荐这么做。
    如何构建:Maven首先解析聚合模块的名称,不是artifactId,这是为何要在pom中配置合理的name字段。目的更好的清晰输出。
    2.继承
    2.1 父POM
    可以使用继承解决重复的配置。
    可以创建一个父模块。有一个pom文件,与其他模块使用相同的groupId和version。使用artifactId为parent表示父模块。
    其他模块使用继承。
    
    groupId、artifactId和version指定父模块的坐标。是必须的,relativePath表示父模块POM的相应路径。Maven首先从relativePath检查父POM,如果找不到则从本地仓库查找。默认值是 . ./pom.xml 。就是说,Maven默认父POM在上一层目录下。
    正确设置relativePath非常重要:如果父模块没有安装到本地仓库,relativePath路径存在问题,则找不到父POM,导致构件失败。如果根据relativePath找到父pom,它就不需要再检查本地仓库。
    groupId和version也可以继承。artifactId需要自己显示声明,否则会出现坐标冲突。
    2.2可继承的POM元素
    
    
    2.3 依赖管理
    当A,B继承W,当将A,B模块的所有依赖都写在W中的时候,现在添加C模块,但是C模块并不依赖某些构件。怎么办?
    Maven提供的dependencyManagement元素,能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性。在dependencyManagement元素下依赖声明不会引入实际的依赖,不过它能约束dependencies下的依赖使用。
    例子:
    父POM配置:
    
    子POM配置:
    
    子POM中的依赖配置较原来简单了一些,所有的配置值配置了groupId和artifactId。省去了version。还可以省略范围(scope标签)。
    使用这种依赖管理机制似乎不能减少太多pom配置。但是建议使用,原因:父POM使用dependencyManagement声明依赖能够统一项目范围中的依赖版本,减少多个子模块版本依赖不一致情况,降低依赖冲突。
    如果子模块不声明依赖的使用,不会产生任何实际效果。
    scope的import属性:导入依赖范围;只对dependencyManagement元素下才有效果,使用该范围的依赖通常指向一个POM,作用是将目标POM中的dependencyManagement配置导入到当前POM的dependencyManagement元素中。
    例子:
    
    注意:type为pom,import一般都指向打包类型为pom的模板,如果多个项目,它们使用的依赖版本都是一致的,可以定义一个dependencyManagement专门管理,各个项目导入这些依赖管理配置。
    2.4 插件管理
    使用pluginManagement元素管理插件。也不会造成实际的插件调用行为,当POM中配置了真正的plugin元素,并且其groupId和artifactId与pluginManagement中的配置的插件配置匹配时,pluginManagement的配置才会有实际插件行为。
3、聚合与继承的关系
    聚合:为了方便快捷构件项目;对于聚合模块来说,它知道哪些被聚合的模块,被聚合的模块不知道这个聚合模块的存在。
    继承:主要为了清除重复配置。父POM不知道哪些子模块,子模块知道父模块。
    相同点:POM的packaging必须是pom。聚合模块与继承关系中的父模块除了POM之外没有实际的内容。在实际项目中,一个pom及时聚合pom又是父pom。
4、约定优于配置
    不多说,使用工具和框架都知道!!!
5、反应堆
    反应堆(Reactor):所有模块组成一个构建结构。从而自动计算出合理的构件顺序。
    5.1 反应堆顺序
    Maven按序读取POM,如果POM没有依赖模块,那就构件该模块,否则先构建其依赖块,如果依赖块还依赖其他模块,则进一步先构建依赖的依赖。如果出现循环则Maven报错。
    5.2 裁剪反应堆
    如果用户仅仅构建反应堆中的某些个模块。
    Maven提供很多的命令行选项支持裁剪反应堆。
    
    例子:
    
    
    
    
    
 
 
 
 
 
 
 
    

6 Maven聚合与集成的更多相关文章

  1. 笔记:Maven 聚合和继承

    聚合模块 我们希望一次构建两个或更多项目,而不是到每个模块的目录下分别执行mvn命令,Maven 聚合这一特性就是为该需求服务的, 为了使用聚合,我们必须创建一个聚合模块,通过该模块与其他项目聚合,并 ...

  2. 06 Maven 聚合和继承

    Maven 聚合和继承 1. 聚合 2. 继承 <parent> <groupId>org.apache.karaf.demos</groupId> <art ...

  3. maven聚合(依赖聚合)

    maven聚合工程 原文地址:http://juvenshun.iteye.com/blog/305865 http://blog.csdn.NET/woxueliuyun/article/detai ...

  4. 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)

    一.架构演变 1.系统架构.集群.分布式系统 简单理解 (1)什么是系统架构? [什么是系统架构?] 系统架构 描述了 在应用程序内部,如何根据 业务.技术.灵活性.可扩展性.可维护性 等因素,将系统 ...

  5. (十四)Maven聚合与继承

    1.Maven聚合 我们在平时的开发中,项目往往会被划分为好几个模块,比如common公共模块.system系统模块.log日志模块.reports统计模块.monitor监控模块等等.这时我们肯定会 ...

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

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

  7. maven,spring,mybatis集成错误

    maven,spring,mybatis集成的时候单元测试junit测试没问题,但mvn jetty:run 就报错误 错误: org.apache.ibatis.binding.BindingExc ...

  8. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例

    Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...

  9. idea下创建maven聚合(子父级)项目,多模块项目

    IDEA下Maven多模块项目介绍和搭建 idea 创建maven聚合项目简洁教程(手把手入门,通俗易懂) 本人使用的是: intelj idea 创建聚合项目(典型web项目,包括子项目util.d ...

随机推荐

  1. Scrapy学习-20-数据收集

    Scrapy的数据收集功能 定义 Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数值. 该机制叫做数据收集器(Stats Collector),可以通过 Craw ...

  2. AC日记——爱改名的小融2 codevs 3149

    3149 爱改名的小融 2  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Wikioi上有个人叫小融,他喜 ...

  3. luogu P1103 书本整理

    题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同,所 ...

  4. [UOJ#24]【IOI2014】Rail

    #24. [IOI2014]Rail 台湾有一个连接着岛的东.西两岸的庞大的铁路线.这个铁路线包含有 mm 个区段.这些相连的区段以数字 0,…,m−10,…,m−1 为编号,且编号由西端开始.每一个 ...

  5. (入门SpringBoot)SpringBoot结合redis(四)

    SpringBoot整合redis: 1.引入jar <!--  引入redis依赖 --><dependency>    <groupId>org.springf ...

  6. [反汇编练习] 160个CrackMe之030

    [反汇编练习] 160个CrackMe之030. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  7. C#制作、打包、签名、发布Activex全过程【转】

    http://www.cnblogs.com/still-windows7/p/3148623.html 一.前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信.调用,单单依靠H ...

  8. 赞一下TMS Software 和 AdvStringGrid

    非常久前给Support发Email问能不能在设计期给AdvStringGrid标题加个数字标识.每次我都是自己改代码加上去.这次升级到新版本号,没想到增加了这个功能: 功能虽小可是非常有用,非常多的 ...

  9. Linux以下基于TCP多线程聊天室(server)

    接上篇博文,本文是server端的实现,主要实现的功能,就是现实client的连接.转发client发送的消息.以及client掉线提示等功能,同一时候能够在这这上面扩展和TCP以及线程相关的功能木块 ...

  10. sql的一些知识

    查询 查询表中的所有列(所有信息) SELECT * FROM userinfo 查询某一列(指定) select name from userinfo 查询某一列(指定,去重) SELECT DIS ...