Maven学习归纳(五)——继承与聚合实例讲解
一、Maven的继承
1.1 什么是继承?
继承:父工程拆分出很多子工程,可以通过父工程,统一管理依赖的版本
1.2 为什么要使用继承呢?
在A.jar 依赖着——》B.jar依赖着——》 C.jar 的范围内,
如果B.jar是在compile范围内的,则A.jar才依赖于C.jar
这样每次A依赖于B的时候,还得盯着B和其他的jar关系是不是compile
很是麻烦,可不可以有A依赖于B,就有A自然依赖于C???
于是这里就可以使用继承
只要A继承B,不管B是依赖C,D,E还是F。A都可以使用B的所有依赖,不用管compile这个东西
如下例子所示:
先建立一个父类工程B
如下:
需要给父工程写一下依赖,加一层<dependencyManagement></dependencyManagement>
子工程上HelloWrold(设定:没有junit这个包),继承一个父工程B(设定:有junit这个包)
因为是继承,所以B有的,HelloWrold也有的话,有点多余了
所以就注释掉HelloWrold跟B重复的,只要写模块名就有了
父类B可能依赖的太多了,子类HelloWrold没必要用那么多
那么子类HelloWrold就需要声明一下它需要用到哪些父类的依赖,子类声明哪些就用哪些,即时父类用了100个,子类仅要3个都是可以的。
当然,不声明就不给用,但在Effective POM上可以查看到子类已经继承父类所有的 jar了
二、关于聚合
2.1 什么是聚合?
Maven将一个大工程拆分成若干个子工程模块,聚合可以将拆分的多个子工程合起来
2.1 为什么要聚合?
我们最终都要将各个Maven工程安装到仓库中,但是由于存在继承关系使得我们必选先安装父工程才可以安装子工程,否则会报错。
而且必须一个一个的install。那么能不能有一种更好的方式完成一键安装呢?聚合工程就可以完成。
Maven项目能够识别的:自身项目包含,本地仓库的,其他位置就不行
Maven2依赖Maven1,则在执行时,必须先将Maven1加入到本地仓库,之后才能执行Maven2
前置工作的install操作,可以交由“聚合”一次性搞定,没必要手工一个一个把项目ABCDE......install
就是说如果Maven2依赖很多工程,没有必要手动install所有的依赖工程,这样太麻烦
聚合的使用:
在一个总工程中配置聚合:聚合的配置,只能配置在打包方式为pom的MavenAggration工程中
需要在Maven1,Maven2,总工程ManvenAggration的配置文件上加如下:
为了验证这个功能,所以我必须保证我的本地仓库,现在还没有Maven1上传进来。
仅仅靠clean是不能清除掉的,所以要手动删除文件夹
打包看看结果,如图所示:
发现本地仓库新增了三个项目,这就是聚合的效果