原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47001831   感谢!

类之间有聚合和继承关系,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实战(九)---模块聚合和继承

    类之间有聚合和继承关系,Maven也具备这种设计原则. 那么Maven的pom是怎样进行聚合与继承的呢? 一.什么是聚合?为什么要用聚合? 上一篇博客介绍了模块化的基本知识. 有了模块化,那么我们项目 ...

  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. 我的第一个jquery插件:下拉多选框

    <!DOCTYPE HTML> <html> <head> <title> New Document </title> <meta n ...

  2. Windows 7下配置JDK环境变量和Java环境变量配置

    下面来介绍一下Java环境变量配置,是在Windows 7下配置JDK环境变量. 方法/步骤  1 安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为:C:\Program Fil ...

  3. [Codeforces677B]Vanya and Food Processor(模拟,数学)

    题目链接:http://codeforces.com/contest/677/problem/B 题意:n个土豆,每个土豆高ai.现在有个加工机,最高能放h,每次能加工k.问需要多少次才能把土豆全加工 ...

  4. Ural1076(km算法)

    题目大意 给出n*n表格,第a[i,j]表示i到j的权值,现在我们要将每个a[i,j]=sum[j]-a[i,j], 求出当前二分图a[][]最小匹配 最小匹配只需将权值取负后,求二分图最大匹配,使用 ...

  5. dom4j修改,获取,增加xml中某个元素的属性值

    XML文件: <?xml version="1.0" encoding="UTF-8"?> <vrvscript> <item I ...

  6. chrome 远程调试(转)

    http://www.tuicool.com/articles/ZJfeAzi 由于 appspot.com被墙,一般调试不成功. 随着智能手机的普及,移动设备的浏览器功能越来越强大,我们用手机上网时 ...

  7. Java [leetcode 8] String to Integer (atoi)

    问题描述: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ...

  8. 最简单的视音频播放示例2:GDI播放YUV, RGB

    前一篇文章对“Simplest Media Play”工程作了概括性介绍.后续几篇文章打算详细介绍每个子工程中的几种技术.在记录Direct3D,OpenGL这两种相对复杂的技术之前,打算先记录一种和 ...

  9. windows下MySql没有setup.exe时的安装方法

    01.把 mysql-advanced-5.6.17-winx64.zip 解压到自定义 D:\mysql-5.6.17-W64 或 D:\mysql-advanced-5.6.17-winx64 目 ...

  10. ActionBarSherlock的学习笔记(一) -------------- ActionBarSherlock的简要介绍

    1. 介绍 ActionBarSherlock 是Android compatibility library 的一个扩展, 不知道什么原因 Android 兼容开发包没有包含ActionBar. 所以 ...