1、<models><model>
模块标签,用于聚合maven各子模块,方便项目统一管理的作用,具有父子层级关系,标签用在父层级POM中
业务场景:一个复杂的系统包含多个模块,可用models集合的方式快速构建项目,方便管理
2、<parent>
继承标签,功能类似java的继承作用,具有父子继承关系,标签用在子POM中
业务场景:抽离子类公共依赖,统一控制版本号,如 spring-boot-starter-parent 使用
3、<dependencyManagement>
继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和 artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID 匹配到这里的依赖,并使用这里的依赖信息,标签用在父POM中
业务场景:一般与<parent>配合使用,将父类公共依赖管理起来,按子类需要继承(加载)
4、<distributionManagement>
项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。
5、<pluginManagement>
子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置
经验总结:
1.聚合主要是为了方便快速构建项目,继承主要是为了消除重复配置;
2.对于聚合模块而言,它知道有哪些被聚合的模块,但那些被聚合的模块不知道这个聚合模块的存在;对于继承的父pom而言,它不知道有哪些子模块继承它,但那些子模块都必须知道自己的父POM是什么;
3.聚合POM与继承中的父POM的packaging都必须是pom;同时,聚合模块与继承中的父模块除了POM外,都没有实际的内容