一、历史回顾
(一)、依赖性传递
A.jar ---> B.jar ---> C.jar
要使 A.jar ---> C.jar:当且仅当B.jar依赖于C.jar的范围是compile。
这里总是需要盯着B这里的范围总是compile,但是这里不想在盯着,不管<scope>是什么都A.jar都可以依赖到C.jar,这就需要继承了。
二、Maven继承、聚合
(一)、Maven继承
1、继承:A ---> B,则A可以使用B的所有依赖。
2、继承实现步骤
a、父工程打包方式需要是:pom
b、父工程的依赖需要写在<dependencyManagement>中,如下面代码所示:
c、子工程的pom.xml配置
(a)、添加<parent>标签
(b)、在<parent>标签中,加入父工程坐标(GAV)。如果子工程GAV这部分内容有与父工程有重复的地方,子工程可以省略(因为可以从父工程继承而来)。
(c)、在<parent>的<relativePath>标签中,当前工程的pom.xml到父工程的pom.xml相对路径。
(d)、在子类中需要声明:使用那些父类的依赖(声明:只需要GA)
3、案例
例:Son项目继承Parent项目的junit依赖
Parent项目:
pom.xml的配置信息:
Son项目:
pom.xml的配置信息:
(二)、Maven聚合
前面的课程中讲的Demo2依赖Demo1的内容复习一遍,这里是Maven2依赖Maven1。
1、一个项目依赖另一个项目。如下图所示:
2、总结
a、Maven项目能够识别的:自身包含、本地仓库中的
b、Maven2依赖于Maven1,则在执行时:必须先将Maven1加入到本地仓库(install),之后才能执行Maven2。
c、如果Maven2依赖很多Maven1这种情况的项目,那install就很多了。以上前置工程的install操作,可以交由 “聚合”一步搞定。
3、案例
例:Maven2依赖Maven1,具体实现(这里就不详细了)
4、聚合的使用
a、建立总工程:聚合的配置只能配置在(打包方式为pom)的maven工程中
b、在一个总工程中配置聚合:modules
注意:clean命令是删除target目录,并不是清理 install 存放入的本地仓库。如果想清理本地仓库,通过GAV到本地仓库直接手工删除文件夹即可。
总结:
a、配置完聚合之后,以后只要操作总工程,则会自动操作该聚合中配置过的工程。
b、配置聚合之后,不用管聚合的顺序。