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

如何在application.properties中引用spring-boot-maven-plugin生成的build-info属性

问题解答

核心结论

可以在application.properties中使用build-info.properties内的属性,你之前引用失败的核心原因是混淆了Maven构建期属性替换和Spring Boot运行期属性加载两个不同阶段的逻辑。

原因说明

  • @project.artifactId@能正常解析,是Spring Boot默认开启的Maven资源过滤能力,仅能替换Maven构建过程中已存在的原生项目属性。而build-info.properties是spring-boot-maven-plugin的build-info目标在Maven构建后期才生成的文件,资源过滤阶段该文件还不存在,所以不可能通过@build.xxx@的格式在构建期读取到对应属性。
  • 你尝试的${build.artifact}如果没生效,大概率是你配置了Maven对${}格式的占位符做构建期过滤,Maven找不到对应的构建属性就会直接留空或报错,该占位符实际应该是Spring Boot运行期解析的语法。

正确使用方式

方式1:运行期直接引用(推荐,直接读取build-info属性)

Spring Boot默认会自动把classpath下META-INF/build-info.properties的内容加载为运行期属性源,你可以直接在application.properties中用${}引用,注意如果你的Maven开启了${}占位符的过滤,需要加转义符:

# application.properties 写法(无Maven ${} 过滤时直接写)
my.app.name=${build.artifact}
my.app.version=${build.version}

# 如果Maven配置了${}过滤,加转义符避免Maven构建期处理
my.app.name=\${build.artifact}
my.app.version=\${build.version}

运行期Spring会自动从build-info.properties中读取对应值完成填充,代码中也可以直接通过@Value("${build.artifact}")注入使用。

方式2:构建期用Maven原生属性替换

如果不需要依赖build-info的动态生成逻辑,直接用Maven原生属性占位符即可,build-info的核心属性和Maven原生属性对应关系如下:

build-info属性对应Maven占位符
build.group@project.groupId@
build.artifact@project.artifactId@
build.version@project.version@
build.time@maven.build.timestamp@

直接在application.properties中写对应占位符,Maven构建时就会自动替换成对应值。

常见踩坑说明

如果运行期还是读取不到build属性,先检查两个点:

  • 打包后的jar包内是否存在BOOT-INF/classes/META-INF/build-info.properties文件,确认build-info目标配置正确且执行成功
  • 检查是否自定义了Spring Boot的属性源加载规则,排除了build-info的默认加载逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:06:03