随着技术的飞速发展和各种用户对软件的要求愈来愈高,软件自己也变得愈来愈复杂,而后软件设计人员开始采用各类方式进行开发,因而就有了咱们的分层架构、分模块开发,来提升代码的清晰和重用。针对于这一特性,maven也给予了相应的配置。spring
情景分析一:编程
咱们在开发过程当中,建立了2个以上的模块,每一个模块都是一个独立的maven project,在开始的时候咱们能够独立的编译和测试运行每一个模块,可是随着项目的不断变大和复杂化,咱们指望可以使用简单的操做来完成编译等工做,这时Maven给出了聚合的配置方式。安全
聚合的特色:架构
一、pom文件的packaging必须是pommaven
二、核心配置:<modules>,每一个modules 的值都是一个当前pom的相对目录测试
三、聚合的内容仅仅是一个pom.xml文件,并无/src,/test等目录。优化
作面向对象编程的人都会以为这是一个没意义的问题,是的,继承就是避免重复,maven的继承也是这样,它还有一个好处就是让项目更加安全ui
情景分析二:咱们在项目开发的过程当中,可能多个模块独立开发,可是多个模块可能依赖相同的元素,好比说每一个模块都须要Junit,使用spring的时候,其核心jar也必须都被引入,在编译的时候,maven-compiler-plugin插件也要被引入url
如何配置继承:spa
一、pom文件的packaging必须是pom、
二、子模块不声明groupId和version的话就是隐式的继承父模块的groupId和version。
三、relativePath表明父模块的pom地址,默认父pom在上一次目录。
groupId:项目组ID,项目坐标的核心元素
version: 项目版本, 项目坐标的核心元素
description: 项目的描述信息
organization: 项目的组织信息
inceptionYear: 项目的创始年份
url: 项目的URL地址
developers: 项目开发者信息
contributors: 项目的贡献者信息
distributionManagement: 项目的部署配置
issueManagement: 项目的缺陷跟踪系统信息
ciManagement: 项目的持续集成系统信息
scm: 项目的版本控制系统信息
mailingLists: 项目的邮件列表信息
properties: 自定义的maven属性
dependencies: 项目的依赖配置
dependencyManagement: 项目的依赖管理配置
repositories: 项目的仓库配置
build: 包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
reporting: 包括项目的报告输出目录配置、报告插件配置等
是的,maven的依赖管理就是来解决这个问题的
增长一个新的元素:dependencyManagement
从上面的列表中咱们发现dependencyManagement也是能够被继承的,这偏偏知足了咱们的须要,它既可以让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性
dependencyManagement的特性:在dependencyManagement中配置的元素既不会给parent引入依赖,也不会给它的子模块引入依赖,仅仅是它的配置是可继承的
最佳实践:
这时候咱们就能够在父POM中声明这些依赖:
子模块的POM继承这些配置:子模块继承这些配置的时候,仍然要声明groupId和artifactId,表示当前配置是继承于父POM的,从而直接使用父POM的版本对应的资源
这个能够有效的避免多个子模块使用依赖版本不一致的状况,有助于下降依赖冲突的概率。注:只有子模块配置了继承的元素,才会真正的有效,不然maven是不会加载父模块中声明的元素。
<pluginManagement>
继承细节相似 dependencyManagement