类之间有聚合和继承关系,Maven也具备这种设计原则。

那么Maven的pom是怎样进行聚合与继承的呢?

一、什么是聚合?为什么要用聚合?

上一篇博客介绍了模块化的基本知识。

有了模块化,那么我们项目中会有非常多模块,每一个模块都是独立的maven project,假设项目不大,我们还能够独立的编译測试执行每一个模块,可是随着项目越来越大,我们不得不想办法让我们的工作变得简单,这时就出现了Maven聚合的方式来完毕编译全部模块。

聚合:把多个模块或项目聚合到一期。我们能够建立一个专门负责聚合工作的project.

Maven聚合:当我们的模块许多的时候,我们想要一次构建多个项目。而不是到多个模块的文件夹下分别运行命令。Maven的聚合特性就是为该需求服务的。

Pom.xml:

<parent>
<groupId>com.tgb</groupId>
<artifactId>itoo-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 继承itoo-root的pom文件 -->
<relativePath>../itoo-root/pom.xml</relativePath>
</parent> <artifactId>itoo-basic-parent</artifactId>
<packaging>pom</packaging>
<modules>
<module>../itoo-basic-api</module>
<module>../itoo-basic-institution-core</module>
<module>../itoo-basic-institution-web</module>
<module>../itoo-basic-institution-ear</module>
</modules>

Maven约定:

1、首先聚合模块必须为pom。否则无法构建

2、必须有<modules>元素,它是实现聚合的最核心配置。这里能够声明多个module元素。

每一个module的值都是一个当前pom的相对文件夹。

模块所处的文件夹必须和<module>模块所处的文件夹一致。

3、为了方便用户构建项目,通常将聚合模块放在项目文件夹的最顶层,其它模块则作为聚合模块的子文件夹存在。

4、聚合模块的pom没有实质性内容。仅仅有一个pom.xml文件。仅仅是用来帮助其它模块构建的工具。

maven构建:

maven首先解析聚合模块pom、分析要构建的模块、并计算出一个反应堆构建顺序,然后依据这个顺序依次构建各个模块。

反应堆是全部模块组成的一个构建结构。

二、继承

Maven继承也是为了防止反复,让项目的jar包版本号一致,在项目管理上起了非常大的作用。

比方说同样的jar包我们每一个人都须要依赖一遍,而且每一个人引用的版本不同。势必造成项目混乱,执行出问题。

1、子模块省略grouopId和version,都会从父模块依赖下来。

2、子模块元素pom.xml:

<parent>
<groupId>com.tgb</groupId>
<artifactId>itoo-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 继承itoo-root的pom文件 -->
<relativePath>../itoo-root/pom.xml</relativePath>
</parent>

随之而来的问题。假设我创建了一个模块不须要依赖父类的依赖。这时候我们须要用Maven的依赖管理来解决问题。即dependencyManagement。见

Maven实战(六)---dependencies与dependencyManagement的差别

三、总结

对于聚合模块来说,它知道有哪些被聚合的模块,而对于被聚合的模块来说。它们不知道被谁聚合了。也不知道它的存在;对于继承关系的pom来说,它不知道被哪些模块继承了,对于子pom来说。它必须知道要继承谁。

总之,聚合是为了方便高速构建项目,继承是为了消除反复配置。在简化pom的同一时候还能促进各个模块配置的一致性。共同点是两者的packaging都是pom,聚合模块与继承关系中的父模块除了pom之外都没有实际内容。

实际项目中我们会发现。一个pom既是聚合pom,也是父pom,这么做主要是为了方便。

Java成功的重要原因之中的一个就是他可以屏蔽大部分操作系统的差异,XML流行的原因之中的一个是全部语言都接受他。Maven用的人越来越多是Maven提倡约定优于配置,这是Maven最核心的设计理念之中的一个。

Maven实战(九)---模块聚合和继承的更多相关文章

  1. (转)Maven学习总结(五)——聚合与继承

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(五)——聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <mod ...

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

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

  3. Maven详解之聚合与继承

    说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...

  4. Maven学习总结(五)——聚合与继承

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ...

  5. 转】Maven学习总结(五)——聚合与继承

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4058008.html 感谢! 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1. ...

  6. Maven学习小结(四 聚合与继承)

    1.聚合 一次构建多个项目模块. 2.继承 为了消除重复,把很多相同的配置提取出来,例如groupid和version: 2.1 Maven中可以继承的POM元素 groupId :项目组 ID ,项 ...

  7. Maven详解 之 聚合与继承

    说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...

  8. Maven模块聚合与继承

    聚合 假如有account-email和account-persist两个模块,我们想要一次构建这两个项目,这时须要用到聚合. 聚合模块 package值必须为pom 必须有元素modules mod ...

  9. (5)Maven快速入门_5maven聚合与继承_scope依赖范围

    多个maven项目实现统一管理, maven 插件jar继承自父的maven项目.对maven中jar的版本进行管理. 1.创建一个项目来管理多个maven项目 new ----maven Proje ...

随机推荐

  1. Back Track 5 之 网络踩点

    DNS记录探测 dnsenum 针对NDS信息收集的工具 格式: ./dnsenum.pl dbsserver (域名) 请原谅我拿freestu.net这个学校团委的域名做的测试,求不黑!! dns ...

  2. nodejs pm2的简单应用

    一.简介 pm2是一个带有负载均衡功能的应用进程管理器,类似有Supervisor,forever,详细参数见官网:http://pm2.keymetrics.io 二.安装 Linux Binari ...

  3. (转)初识 Lucene

    Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能.Lucene 目前是 Apache Jakarta 家族中的一个开源项目. ...

  4. X86-64寄存器和栈帧

    简介 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果.除此之外,它们还各自具有一些特殊功能.通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途, ...

  5. cocos lua 加密与解密 混淆 (版本号cocos3.4)

    cocos luacompile cocos luacompile Overview Usage Available Arguments Samples Overview Compile the .l ...

  6. curl库的使用,32-64

    http 使用curl发起https请求 http://www.cnblogs.com/ainiaa/archive/2011/11/08/2241385.html Curl配置及编译: CFLAGS ...

  7. strcpy sprintf memcpy 它们之间的区别

    strcpy,sprintf,memcpy的区别 strcpy 函数操作的对象是 字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能.  snprintf 函数操作的对象 不限于字符串:虽然目 ...

  8. Java从零开始学三十六(JAVA IO- 字符流)

    一.字符流 BufferedReader:BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中 BufferedWriter:把一批数据写入到缓冲区,当缓冲区区的 ...

  9. UNIX网络编程读书笔记:辅助数据

    辅助数据(ancillary data)可通过调用sendmsg和recvmsg这两个函数,使用msghdr结构中的msg_control和msg_controllen这两个成员发送和接收. 辅助数据 ...

  10. Gradle修改Maven仓库地址

    博客已经搬家https://www.tianmingxing.com 背景 不知从什么时候大家开始使用gradle管理项目了,随着时间的推移从maven转过来的人肯定越来越多.关于gradle的优势在 ...