无论 POM 文件中是否显示的声明,所有的 POM 均继承自一个父 POM
,这个父 POM 被称为 Super POM
。在pom的继承关系中,子pom可以覆盖父pom中的配置
;如果子pom没有覆盖,那么父pom中的配置将会被继承
。按照这个规则,继承关系中的所有pom叠加到一起,就生成一个最终生效的pom
。maven实际运行的过程中,执行构建操作就是按照这个最终的pom
运行起来的。最终的pom也叫作有效pom翻译为effective POM
,通过mvn help:effective-pom
命令就可以查看项目的最终生成的pom(有效的pom)。
注意:假如项目当中引用了一个A的依赖,而A又引用了其他的依赖,通过
mvn help:effective-pom
查出来的pom并不会展示出来A引用的其他依赖(不展示并不代表不可以使用,具体是否可以使用要根据依赖的scope来决定的)。只会展示出来当前项目<parent>
所继承的依赖!可能他所继承的pom当中仍然继承了别的,会将所有层级汇集起来展示出来的!
下面进行示例演示,通过示例便可以一目了然:
项目是一个聚合项目,如下是父工程的pom.xml
这是一个common包,主要存放公共的一些配置
这是一个web工程
这时候我们对web工程进行使用mvn help:effective-pom
命令,看看他究竟执行的时候有哪些依赖。
他会把所有父 POM汇集到一起生成一个pom,lombok我是在父类当中引用的,可以发现最终pom当中他会继承过来的。
你可以看到 effective-pom 中包含了 Maven 在执行任务时需要用到的默认目录结构、输出目录、插件、仓库和报表目录等内容。