maven的聚合与继承

Maven聚合与继承解析

maven的聚合

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

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

135833_vFwJ_2464465.png

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

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

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

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

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

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

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

maven继承

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

父模块的例子:

155927_yHCC_2464465.png

要注意的是packaging的值为pom,groupid、version和其他子模块一致,artifactid 表示这是一个父pom

子模块继承模块的例子:

160126_ukZA_2464465.png

160205_9bS0_2464465.png

parent:申明父模块

groupid 、artifactid、version  指定了父模块的坐标,这三个元素是必须的。

relativePath : 父模块的pom相对路径,默认值../pom.xml。构建时,maven会先从relativepath去找父pom,如果没找到再取本地仓库去找.

可继承的常见元素有:

groupid ,version ,properties,dependencyManagement,distributionManagement等等,这里不一一举例。

依赖管理:

dependencyManagement

父pom的片段如下:

162835_YFUa_2464465.png

properties :提取了相关依赖的版本

dependencyManagement : 申明了项目的依赖,但是该申明不会给当前父模块引入依赖,也不会给子模块映入依赖。但是这段配置却是会被继承的

子pom片段:

163651_vPQ2_2464465.png

如果子模块需要使用父模块里申明的依赖,只需要配置 groupid 和 version 两个元素即可。子模块里没有配置,即使在父模块里申明了,也不会在子模块映入依赖。

虽然这样配置并不能减少太多的配置,但是在dependencyManagement统一申明了依赖版本,就避免了子模块依赖版本不一致的问题。

插件管理:

pluginManagement

父pom片段:

165753_g002_2464465.png

子pom片段:

165818_dScK_2464465.png

165842_T0TP_2464465.png

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

聚合与继承的关系

聚合:

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

170746_zbpp_2464465.png

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

继承:

1、主要是为了消除重复

170841_HE6u_2464465.png

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

相同点:

1、pakaging都为pom

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

反应堆:

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

反应堆的构建顺序:

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

剪裁反应堆:

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

主要的参数如下:

173616_RD02_2464465.png

174043_RfBe_2464465.png

174058_edm4_2464465.png

174110_giTB_2464465.png

174124_gsMu_2464465.png

174135_0fIE_2464465.png

转载于:https://my.oschina.net/u/2464465/blog/1601331

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值