继承:Ason继承Aparent,则Ason继承Aparent的所有依赖。
继承与依赖传递的区别是,不需要关心B的依赖 scope为compile这个前提条件。
1、如何配置继承:
1)说到继承肯定是一个父子结构,那么我们创建一个parent project
2)
3)结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录
4)新的元素:
5)
6)relativePath的默认值: ../pom.xml
7)子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素。
2、可被继承的POM元素
groupId:项目组ID,项目坐标的核心元素
version: 项目版本, 项目坐标的核心元素
description: 项目的描述信息
organization: 项目的组织信息
inceptionYear: 项目的创始年份
url: 项目的URL地址
developers: 项目开发者信息
contributors: 项目的贡献者信息
distributionManagement: 项目的部署配置
issueManagement: 项目的缺陷跟踪系统信息
ciManagement: 项目的持续集成系统信息
scm: 项目的版本控制系统信息
mailingLists: 项目的邮件列表信息
properties: 自定义的maven属性
dependencies: 项目的依赖配置
dependencyManagement: 项目的依赖管理配置
repositories: 项目的仓库配置
build: 包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
reporting: 包括项目的报告输出目录配置、报告插件配置等
3、继承实现步骤
1)创建Aparent父工程,打包方式为pom,pom.xml中编写依赖
2)创建Ason子工程,指定父工程gav(子可省gv),并声明要使用父工程的那些依赖ga
3)创建一个类,使用Junit测试OK
Maven将一个大工程可拆分成若干个子工程/模块/项目
聚合:可以将拆分的若干个子工程合成一个大工程。
多个Maven项目/模块之间如何依赖,必须 install 放到本地仓库,供其他项目依赖使用。而聚合可不需要 instal 操作。
1、如何配置聚合:
1)创建一个Maven项目作为聚合使用,负责管理若干个子工程
2)它的打包方式必须为: pom
3)引入了新的元素:modules -- module
4)版本:聚合模块的版本和被聚合模块版本一致
5)relative path:每个module的值都是一个当前POM的相对目录
6)目录名称:为了方便的快速定位内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和
7)习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层,其它聚合模块作为子目录存在。这样当我们打开项目的时候,第一个看到的就是聚合模块的POM
8)聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
9)聚合模块和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么聚合模块的POM也需要做出相应的更改。
2、聚合实现步骤
1)创建一个Maven项目作为聚合使用,起名maven1,打包方式为pom
2)创建若干子工程/模块,起名mavenA,mavenB,mavenB依赖mavenA
3)maven1 测试OK
配置完聚合之后,以后只要操作总工程(maven1),则会自动操作该聚合下配置过的若干工程/项目/模块
对 maven1 进行 package install 操作,各模块target下生成 jar包,insall 到本地仓库
上面继承与聚合都采用的是平行结构,接下来使用父子结构(创建子工程是直接存在父工程下面)来实现,
1、Maven Project创建父工程 maven_parent
2、Maven Module创建子工程 maven_A和maven_B
3、切换显示不同的maven子项目显示方式
4、配置继承,聚合,依赖
5、maven_parent 测试OK
配置完聚合之后,以后只要操作总工程(maven_parent),则会自动操作该聚合下配置过的若干工程/项目/模块
对 maven_parent 进行 package install 操作,各模块target下生成 jar包,insall 到本地仓库
总结
1、聚合:可以将拆分的若干个子工程合成一个大工程,
对于聚合模块来说,它知道有哪些被聚合的模块,而对于被聚合的模块来说,它们不知道被谁聚合了,也不知道它的存在。
2、继承:可以通过父工程统一管理依赖的版本号
对于继承关系的父POM来说,它不知道自己被哪些子模块继承了,对于子POM来说,它必须知道自己的父POM是谁。
3、在一些最佳实践中我们会发现:一个POM既是聚合POM,又是父POM,这么做主要是为了方便。
平行结构与父子结构随自己选择,注意:相对路径,POM也需要做出相应的更改
上面自己对maven知识点亲测OK
参考文章:
maven之详解继承与聚合
站在前辈的肩膀上,每天进步一点点
ends~