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

Maven子项目无法读取父POM属性报错,求spring.boot.version获取方法

子项目无法读取父POM中spring.boot.version属性的解决方法

问题背景

我有一个子项目的pom.xml,其中尝试引用定义在父POM中的spring.boot.version属性:

<?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.seurop.eca.ocb.middyweb.mackoffice.server</groupId>
        <artifactId>ocb-kw-mackoffice-server</artifactId>
        <version>6.0.0</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>ocb-kw-mackoffice-server-annotations</artifactId>
    <name>ocb-kw-mackoffice-server-annotations</name>

    <!-- Properties Section -->
    <properties>
        <parent.version>6.0.0</parent.version>
        <eclipselink.version>2.7.12</eclipselink.version>
        <lombok.version>1.18.22</lombok.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>
...

</project>

运行时触发错误:

org.springframework.boot:spring-boot-starter-data-jpa:jar:${spring.boot.version} was not found in...

父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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.seurop.eca.ocb.middyweb.mackoffice.server</groupId>
    <artifactId>ocb-kw-mackoffice-server</artifactId>
    <version>6.0.0</version>
    <name>huti</name>
  
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <spring-boot.version>2.7.18</spring-boot.version>
        <activiti.version>6.0.0</activiti.version>
        <commons-csv.version>1.12.0</commons-csv.version>
        <eclipselink.version>4.0.4</eclipselink.version>
        <h2.version>2.1.210</h2.version>
        <jackson.version>2.16.1</jackson.version>
        <java.version>1.8</java.version>
        <javax.mail.version>1.4.7</javax.mail.version>
        <jasperreports-functions.version>6.19.1</jasperreports-functions.version>
        <jasperreports.version>6.19.1</jasperreports.version>
        <junit-jupiter-engine.version>5.2.0</junit-jupiter-engine.version>
        <lombok.version>1.18.34</lombok.version>
        <maven-surefire-plugin.version>2.21.0</maven-surefire-plugin.version>
        <oracle.version>11.2.0.4</oracle.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-test-dbunit.version>1.3.0</spring-test-dbunit.version>
        <springfox.version>2.9.2</springfox.version>
        <tomcat-embed-core.version>9.0.56</tomcat-embed-core.version>
    </properties>

....
</project>

解决方案

方案1:修正属性名称拼写

父POM中定义的属性是spring-boot.version(连字符分隔),但子项目里引用的是${spring.boot.version}(点号分隔),两者名称不匹配导致无法读取。直接修改子项目的引用即可:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring-boot.version}</version>
</dependency>

方案2:利用Spring Boot Parent的依赖管理特性

由于父POM已经继承了spring-boot-starter-parent,这个父POM已经内置了所有Spring Boot Starter依赖的版本管理逻辑,子项目完全可以省略版本号,Maven会自动从Spring Boot Parent中匹配对应版本:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这种方式不仅解决了属性引用问题,还能简化POM配置,避免手动维护版本号的麻烦。

方案3:确保父POM正确加载

检查子项目中<relativePath>的路径是否正确,确认Maven能找到父POM文件。如果路径无误,先执行mvn clean install将父POM安装到本地仓库,再构建子项目,避免因父POM未被识别导致的属性无法读取。


内容的提问来源于stack exchange,提问作者Nunyet Calçada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:08:14