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
相关产品推荐
相关产品推荐

