maven的聚合与继承

maven的聚合

        当一个子项目下都多个模块,咱们须要构建项目时广泛的作法就是进入各个模块逐一构建,可是这样真的是最好的办法么?能不能一次构建两个模块呢?固然能够,maven的聚合特性就是为该需求服务的。maven

        要实现同时构建多个模块,咱们须要在另外建立一个maven项目(聚合模块),而后经过构建该模块来构建其余模块。聚合模块的pom样例以下:spa

groupid、version:与被聚合模块一致插件

artifactid:前缀与被聚合模块一致日志

packaging: 须要注意,与被聚合模块不一样,这里的值为pomxml

name:给项目提供一个更适合阅读的名字,构建时日志输出的是这个名字,而不是artifactid继承

modules:这里能够申明任意数量的modules来实现模块的聚合,这里的每一个moudule的值是当前这个pom的相对路径io

        为了方便用户构建项目,通常是将聚合模块放在项目目录的最顶层,其余模块则作为聚合模块的子目录存在。module

        固然也是可使用平行的目录结构,可是响应的module的值要作相应的更改,记住,modules的值是当前pom的相对路径。配置

maven继承

        不少模块有不少相同的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,若是该模块没有依赖的模块那么就构建该模块,若是有依赖的模块就先去构建依赖的模块,若是依赖的模块还依赖与其余模块,那么就进一步构建依赖的模块。正确的反应堆应该是一个有向非循环图。

剪裁反应堆:

若是用户只想构建反应堆中的某些模块,咱们就须要去剪裁反应堆。

主要的参数以下:

相关文章
相关标签/搜索