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

Maven父模块执行任务时子模块无法继承依赖管理版本问题

父POM的dependencyManagement版本继承异常:单独构建子模块正常,父模块执行任务报错

在父POM的dependencyManagement中统一定义了依赖版本,子模块引用这些依赖时未指定版本。单独构建子模块完全正常,但在父模块执行Maven任务(如mvn clean)时,会报错子模块依赖缺少版本号。

父POM代码

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.myproject</groupId>
  <artifactId>parent</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>parent</name>

  <modules>
    <module>common</module>
  </modules>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <maven.compiler.release>11</maven.compiler.release>

    <lombok.version>1.18.28</lombok.version>
    <protobuf.version>3.21.12</protobuf.version>
    <jackson-version>2.13.5</jackson-version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson-version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>${protobuf.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java-util</artifactId>
        <version>${protobuf.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
  <build>...</build>
  <distributionManagement>...</distributionManagement>
  <repositories>...</repositories>
  
</project>

子模块POM代码

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.myproject</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>

  <artifactId>common</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>common</name>
  <description>Common module</description>

  <properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java-util</artifactId>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
  </dependencies>

  <build>...</build>
  
</project>

报错信息

[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project mx.myproject:common:1.0.0-SNAPSHOT (/#####/myproject/common/pom.xml) has 4 errors
[ERROR]     'dependencies.dependency.version' for com.fasterxml.jackson.core:jackson-databind:jar is missing. @ line 26, column 17
[ERROR]     'dependencies.dependency.version' for com.google.protobuf:protobuf-java:jar is missing. @ line 30, column 17
[ERROR]     'dependencies.dependency.version' for com.google.protobuf:protobuf-java-util:jar is missing. @ line 34, column 17
[ERROR]     'dependencies.dependency.version' for org.projectlombok:lombok:jar is missing. @ line 38, column 17

环境与尝试过的操作

  • 使用Maven 3.9.5(无自定义m2配置)
  • 清理过m2缓存、删除项目相关工件,无效
  • 将dependencyManagement复制到子模块后问题消失,但不符合集中管理版本的需求

解决办法

1. 修正父项目groupId的一致性

报错信息中子模块的groupId显示为mx.myproject,但父POM和子模块POM中配置的是com.myproject,这是核心问题:Maven解析父POM时,子模块实际引用的父项目不存在,导致无法继承dependencyManagement中的版本定义。

修改子模块POM中的父项目groupId,确保和父POM完全一致:

<parent>
  <groupId>com.myproject</groupId> <!-- 修正为与父POM一致的groupId -->
  <artifactId>parent</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</parent>

若父项目实际groupId为mx.myproject,则修改父POM的groupId为对应值即可。

2. 添加父POM的relativePath(可选)

如果父项目还未安装到本地仓库,在子模块的<parent>节点中添加relativePath,指定父POM的相对路径,确保Maven能正确定位父POM:

<parent>
  <groupId>com.myproject</groupId>
  <artifactId>parent</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <relativePath>../pom.xml</relativePath> <!-- 父POM在子模块上级目录时使用 -->
</parent>

3. 确认父POM的packaging类型

父POM的packaging必须为pom,你的配置已符合要求,此点无需修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:17:33