06 聚合和继承
一、Maven多模块
????? 当我们一个项目有多个模块时,我们想使用一个命令即可对多个模块进行构建。Maven聚合就是为了满足该需求的。
????? 假设我们有两个模块A和B。想使用一个命令就构建A和B两个模块,我们需要创建一个额外的名为C的模块,然后通过该模块构建整个项目的所有模块。作为一个模块,它必须有自己的POM文件,但作为一个聚合项目,它的POM又有其特殊地方。如:
????? 上述POM文件有两个特殊的地方:一是打包类型必须为pom,二是有modules元素。
??????通常为了方便用户构建项目,通常将聚合模块放在项目目录的最顶层,其他模块则作为聚合模块的子目录。如果使用平行目录,则聚合模块的POM要作出相应修改:???? 上述POM文件中parent指明了父模块。relativePath元素指明了父模块pom.xml文件位置。默认值是目前模块的上层目录。子模块可以不指定groupId和artifactId。
?
2.可继承的POM元素
???? 大多数元素都可被继承(是否意味着有些元素不能被继承??)?
3.依赖管理
????? 子模块会继承父模块的依赖,但是并不是所有子模块都需要父模块中的所有依赖,此时可使用 dependencyManagement 元素,在dependencyManagement中声明的依赖不会引入实际的依赖,不过它能够约束dependencies下的依赖使用。子模块只要指定依赖的groupId和artifactId即使显示指定该依赖。?
4.插件管理
????? pluginManagement和dependencyManagement类似,用来管理插件。?
三、聚合和继承的关系
????? 两者的目的不同,聚合是为了方便构建,继承是为了消除重复配置。
对于聚合模块来说,它需要知道哪些被模块被聚合,但那些被聚合的模块不知道这个聚合模块的存在。
??????对于继承关系的父模块来说,它不知道有哪些子模块继承于它,但那些子模块才都必须知道自己的父模块。
????? 现实中,通常将一个打包类型为pom的模块即作聚合模块,又作父模块。四、反应堆
1.概述
????? 所有反应堆是一个多模块项目中,所有模块组成的一个构建结构。根据各个模块之间的依赖关系,Maven会自动生成反应堆,要注意不能让两个模块互相依赖。
2.裁剪反应堆
????? 一般来说,用户会选择构建整个项目或者模块某个模块,但有些时间,用户会想仅仅构建某些模块,而不所有模块。
-am?? --also-make 同时构建所列模块的依赖模块
-amd --also-make-dependents 同时构建依于所列模块的模块
-pl??? --projeccts <arg> 构建指定的模块,模块间用逗号分隔
-rf??? --resume-fron <arg> 从指定的模块开始构建,反应堆之前的模块不被构建。?