Maven中Parent POM与Super POM是否相同?二者继承关系如何?
Maven Parent POM与Super POM的区别及继承关系说明
核心结论
Parent POM和Super POM完全不是同一个概念,你提到的第二种继承层级是正确的:deps2 → deps → Maven官方提供的Super POM,不存在没有Super POM的情况。
两个概念的明确区分
- Super POM:是Maven内核内置的顶层默认POM,属于官方提供的基础配置,所有Maven项目默认都会直接或间接继承该POM。它预定义了所有项目通用的基础配置,比如默认构建输出目录为
target、官方公共仓库地址、默认插件版本规则等,是整个Maven POM继承体系的最顶端根节点。 - Parent POM:指开发者在项目中通过
<parent>标签显式声明的自定义父POM,一般用于多模块项目中抽离公共依赖、依赖版本管理、公共插件配置等重复内容,减少子模块的冗余代码,你示例中的deps就属于deps2的自定义Parent POM,不能将其称作Super POM。
示例项目的完整继承链
你的两个POM配置如下:
自定义父POM(deps)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>deps</artifactId> <packaging>pom</packaging> <version>0.0.1-SNAPSHOT</version> <dependencyManagement> <dependencies> <!-- not relevant for this question --> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.12</version> </dependency> </dependencies> </project>
子POM(deps2)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>deps2</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>com.demo</groupId> <artifactId>deps</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <!-- not relevant for this question --> </dependencies> </project>
由于你自定义的deps本身就是一个Maven项目,哪怕你没有为它显式声明父POM,它也会默认继承Maven的Super POM,因此完整继承链为:
deps2 → 自定义父POM deps → Maven官方内置Super POM
内容的提问来源于stack exchange,提问作者samshers
相关产品推荐
相关产品推荐

