当一个子项目下都多个模块,咱们须要构建项目时广泛的作法就是进入各个模块逐一构建,可是这样真的是最好的办法么?能不能一次构建两个模块呢?固然能够,maven的聚合特性就是为该需求服务的。maven
要实现同时构建多个模块,咱们须要在另外建立一个maven项目(聚合模块),而后经过构建该模块来构建其余模块。聚合模块的pom样例以下:spa
groupid、version:与被聚合模块一致插件
artifactid:前缀与被聚合模块一致日志
packaging: 须要注意,与被聚合模块不一样,这里的值为pomxml
name:给项目提供一个更适合阅读的名字,构建时日志输出的是这个名字,而不是artifactid继承
modules:这里能够申明任意数量的modules来实现模块的聚合,这里的每一个moudule的值是当前这个pom的相对路径io
为了方便用户构建项目,通常是将聚合模块放在项目目录的最顶层,其余模块则作为聚合模块的子目录存在。module
固然也是可使用平行的目录结构,可是响应的module的值要作相应的更改,记住,modules的值是当前pom的相对路径。配置
不少模块有不少相同的maven配置以及相同的依赖。为了可以减小重复,maven提供了继承的特性。plugin
父模块的例子:
要注意的是packaging的值为pom,groupid、version和其余子模块一致,artifactid 表示这是一个父pom
子模块继承模块的例子:
parent:申明父模块
groupid 、artifactid、version 指定了父模块的坐标,这三个元素是必须的。
relativePath : 父模块的pom相对路径,默认值../pom.xml。构建时,maven会先从relativepath去找父pom,若是没找到再取本地仓库去找.
可继承的常见元素有:
groupid ,version ,properties,dependencyManagement,distributionManagement等等,这里不一一举例。
依赖管理:
dependencyManagement
父pom的片断以下:
properties :提取了相关依赖的版本
dependencyManagement : 申明了项目的依赖,可是该申明不会给当前父模块引入依赖,也不会给子模块映入依赖。可是这段配置倒是会被继承的
子pom片断:
若是子模块须要使用父模块里申明的依赖,只须要配置 groupid 和 version 两个元素便可。子模块里没有配置,即便在父模块里申明了,也不会在子模块映入依赖。
虽然这样配置并不能减小太多的配置,可是在dependencyManagement统一申明了依赖版本,就避免了子模块依赖版本不一致的问题。
插件管理:
pluginManagement
父pom片断:
、
子pom片断:
与依赖管理相似,这里就不在重复说明。
聚合:
一、主要是为了快速构建项目
二、聚合模块知道被聚合模块,可是被聚合模块不知道聚合模块的存在
继承:
一、主要是为了消除重复
二、父模块不知道哪些子模块继承了它,可是子模块知道他们的父模块
相同点:
一、pakaging都为pom
二、除了pom以外无其余内容
在多组件项目中,反应堆是全部模块组成的一个构建结构;单模块项目,反应堆就是项目自己。可是多模块项目里,反应堆包含了多模块之间的继承和依赖关系,从而可以自动计算出合理的模块构建顺序。
反应堆的构建顺序:
maven按顺序读取pom,若是该模块没有依赖的模块那么就构建该模块,若是有依赖的模块就先去构建依赖的模块,若是依赖的模块还依赖与其余模块,那么就进一步构建依赖的模块。正确的反应堆应该是一个有向非循环图。
剪裁反应堆:
若是用户只想构建反应堆中的某些模块,咱们就须要去剪裁反应堆。
主要的参数以下: