随着技术的飞速发展和各种用户对软件的要求愈来愈高,软件自己也变得愈来愈复杂,而后软件设计人员开始采用各类方式进行开发,因而就有了咱们的分层架构、分模块开发,来提升代码的清晰和重用。针对于这一特性,maven也给予了相应的配置。java
咱们在开发过程当中,建立了2个以上的模块,每一个模块都是一个独立的maven project,在开始的时候咱们能够独立的编译和测试运行每一个模块,可是随着项目的不断变大和复杂化,咱们指望可以使用简单的操做来完成编译等工做,这时Maven给出了聚合的配置方式。spring
所谓聚合,顾名思义,就是把多个模块或项目聚合到一块儿,咱们能够创建一个专门负责聚合工做的Maven 工程。架构
创建该project的时候,咱们要注意如下几点:maven
1. 聚合模块自己也作为一个Maven项目,它必须有本身的POM工具
2. 它的打包方式必须为: pom测试
3. 引入了新的元素:modules---module网站
4. 版本:聚合模块的版本和被聚合模块版本一致spa
5. 相对目录:每一个module的值都是一个当前POM的相对目录.net
6. 目录名称:为了方便的快速定位内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和<module>模块所处的目录</module>相一致。插件
7. 习惯约定:为了方便构建,一般将聚合模块放在项目目录层的最顶层,其它聚合模块做为子目录存在。这样当咱们打开项目的时候,第一个看到的就是聚合模块的POM
8. 聚合模块减小的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,由于它只是用来帮助其它模块构建的工具,自己并无实质的内容。
9. 聚合模块和子模块的目录:他们能够是父子类,也能够是平行结构,固然若是使用平行结构,那么聚合模块的POM也须要作出相应的更改。
咱们在项目开发的过程当中,可能多个模块独立开发,可是多个模块可能依赖相同的元素,好比说每一个模块都须要Junit,使用spring的时候,其核心jar也必须都被引入,在编译的时候,maven-compiler-plugin插件也要被引入。这时咱们采用继承,就不用在每一个子模块分别定义了。
如何配置继承:
1. 说到继承确定是一个父子结构,那么咱们在父工程中来建立一个parent project
2. <packaging>: 做为父模块的POM,其打包类型也必须为POM
3. 结构:父模块只是为了帮助咱们消除重复,因此它也不须要src/main/java、src/test/java等目录
4. 新的元素:<parent> , 它是被用在子模块中的
5. <parent>元素的属性:<relativePath>: 表示父模块POM的相对路径,在构建的时候,Maven会先根据relativePath检查父POM,若是找不到,再从本地仓库查找
6. relativePath的默认值: ../pom.xml
7. 子模块省略groupId和version: 使用了继承的子模块中能够不声明groupId和version, 子模块将隐式的继承父模块的这两个元素
聚合和继承一般是结合使用的,可是其做用是不一样的。聚合是将多个模块的工程汇聚到一块儿,而继承则是指明某个模块工程要继承另外一个模块功能。