You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven中父pom声明的依赖为何没有被子pom继承?

问题原因

核心原因是你没有使用Maven标准的父子项目继承机制,而是使用了import scope的pom依赖导入,二者的作用范围完全不同,具体规则如下:

  • Maven实现父pom全量配置继承的唯一方式是在子pom根节点下声明<parent>标签,该方式会同步继承父pom的普通依赖、全局属性、插件配置、依赖管理等所有公共配置。正确的继承写法示例:
<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">
    <!-- 声明父pom,实现全量配置继承 -->
    <parent>
        <groupId>com.demo</groupId>
        <artifactId>deps</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- relativePath按需填写父pom的本地相对路径,不填默认从本地仓库/远程仓库拉取 -->
        <relativePath>../deps/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <!-- groupId和version可省略,自动继承父pom配置 -->
    <artifactId>deps2</artifactId>

    <dependencies>
        <!-- 无需额外声明spring-core,会自动继承父pom的普通依赖配置 -->
    </dependencies>
</project>
  • 你当前使用的<scope>import</scope>的pom类型依赖,仅能将目标pom的dependencyManagement节点内容导入到当前项目的依赖管理配置中,完全不会处理目标pom的普通<dependencies>节点、属性、插件等其他配置,这是Maven的内置设计规则,因此父pom中直接声明的spring-core不会被子项目引入。

可选替代方案

如果不想使用<parent>标签做父子继承,要复用父pom的普通依赖,可选择以下两种方式:

  1. 将父pom中需要共用的普通依赖全部移动到父pom的dependencyManagement节点下,子项目需要使用对应依赖时,在自身<dependencies>中声明即可,无需填写版本号
  2. 在子项目的<dependencies>节点中直接引入父pom作为普通依赖,配置如下:
<dependency>
    <groupId>com.demo</groupId>
    <artifactId>deps</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>pom</type>
</dependency>

该方式会将父pom的所有普通依赖作为传递依赖引入到子项目中。


内容的提问来源于stack exchange,提问作者samshers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:45:04