【转】Maven实战(九)---模块聚合和继承
原博文出自于: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实战(九)---模块聚合和继承的更多相关文章
- (转)Maven学习总结(五)——聚合与继承
		孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(五)——聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <mod ... 
- Maven实战(九)---模块聚合和继承
		类之间有聚合和继承关系,Maven也具备这种设计原则. 那么Maven的pom是怎样进行聚合与继承的呢? 一.什么是聚合?为什么要用聚合? 上一篇博客介绍了模块化的基本知识. 有了模块化,那么我们项目 ... 
- Maven详解之聚合与继承
		说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ... 
- Maven学习总结(五)——聚合与继承
		一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ... 
- 转】Maven学习总结(五)——聚合与继承
		原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4058008.html 感谢! 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1. ... 
- Maven学习小结(四 聚合与继承)
		1.聚合 一次构建多个项目模块. 2.继承 为了消除重复,把很多相同的配置提取出来,例如groupid和version: 2.1 Maven中可以继承的POM元素 groupId :项目组 ID ,项 ... 
- Maven详解 之 聚合与继承
		说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ... 
- Maven模块聚合与继承
		聚合 假如有account-email和account-persist两个模块,我们想要一次构建这两个项目,这时须要用到聚合. 聚合模块 package值必须为pom 必须有元素modules mod ... 
- (5)Maven快速入门_5maven聚合与继承_scope依赖范围
		多个maven项目实现统一管理, maven 插件jar继承自父的maven项目.对maven中jar的版本进行管理. 1.创建一个项目来管理多个maven项目 new ----maven Proje ... 
随机推荐
- xargs的- n1参数
			起因在对一堆*.tar.gz文件解压缩时,发现tar xvfz *.tar.gz不管用,一查,原来是tar xvfz *.tar.gz会被shell给拆成tar xvfz a.tar.gz b.tar ... 
- OSCache 缓存技术
			前言:OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能.OSCache是个一个广泛采用的高性能的J2EE缓存框架 ... 
- 2008年我买了一本书 书名叫“PHP 6”
			上个星期天,我感觉应该整理一下我的书柜.于是,在书柜里,我发现了一本几乎完全忘记的书(我想不起来为什么要买它!):<PHP 6 – 快速简洁的Web开发> 这本书出版于2008年一月.而六 ... 
- 对mysql经常使用语句的详细总结
			下面总结的知识点全是经常用的,全都是干货,好好收藏吧. /* 启动mysql */net start mysql /* 连接与断开服务器 */mysql -h 地址 -p 端口 -u 用户名 -p 密 ... 
- Java 比较两张图片的相似度
			import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; /** * 比较两张图片 ... 
- android上的缓存、缓存算法和缓存框架
			1.使用缓存的目的 缓存是存取数据的临时地,因为取原始数据代价太大了,加了缓存,可以取得快些.缓存可以认为是原始数据的子集,它是从原始数据里复制出来的,并且为了能被取回,被加上了标志. 在andr ... 
- bzoj4046
			分组赛的题……madan原题,考试想不出来真是SB得不行 首先,从大往小加边,每次加边如果成环必然弹出环上最大边 考虑询问[x,y],如果边权在[x,y]的边弹出了小于等于y的边j,说明j不在最小生成 ... 
- ASP.NET MVC 学习2、从Controller传递数据到View
			参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view 一,Control ... 
- UVa 12230 (期望) Crossing Rivers
			题意: 从A到B两地相距D,之间有n段河,每段河有一条小船,船的位置以及方向随机分布,速度大小不变.每段河之间是陆地,而且在陆地上行走的速度为1.求从A到B的时间期望. 分析: 我们只要分析每段河的期 ... 
- 将多个.a库合并为一个.a库的方法
			如果编译了多个架构的静态库,想将它们合并为一个静态库的时候,可以用如下方法合并: sudo lipo -create /libs/ffmpeg/2.6.3/arm64/lib/libavcodec.a ... 
