您的位置:首页 > 其它

maven的聚合与继承

2018-01-03 00:00 204 查看
摘要: maven的聚合与继承

maven的聚合

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

要实现同时构建多个模块,我们需要在另外创建一个maven项目(聚合模块),然后通过构建该模块来构建其他模块。聚合模块的pom样例如下:



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

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

packaging: 需要注意,与被聚合模块不同,这里的值为pom

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

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

为了方便用户构建项目,一般是将聚合模块放在项目目录的最顶层,其他模块则做为聚合模块的子目录存在。

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

maven继承

很多模块有很多相同的maven配置以及相同的依赖。为了能够减少重复,maven提供了继承的特性。

父模块的例子:



要注意的是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片段:





与依赖管理类似,这里就不在重复说明。

聚合与继承的关系

聚合:

1、主要是为了快速构建项目



2、聚合模块知道被聚合模块,但是被聚合模块不知道聚合模块的存在

继承:

1、主要是为了消除重复



2、父模块不知道哪些子模块继承了它,但是子模块知道他们的父模块

相同点:

1、pakaging都为pom

2、除了pom之外无其他内容

反应堆:

在多组件项目中,反应堆是所有模块组成的一个构建结构;单模块项目,反应堆就是项目本身。但是多模块项目里,反应堆包含了多模块之间的继承和依赖关系,从而能够自动计算出合理的模块构建顺序。

反应堆的构建顺序:

maven按顺序读取pom,如果该模块没有依赖的模块那么就构建该模块,如果有依赖的模块就先去构建依赖的模块,如果依赖的模块还依赖与其他模块,那么就进一步构建依赖的模块。正确的反应堆应该是一个有向非循环图。

剪裁反应堆:

如果用户只想构建反应堆中的某些模块,我们就需要去剪裁反应堆。

主要的参数如下:











内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: