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

从Maven迁移到Gradle,如何在Spring配置与Banner中访问项目变量?

Gradle中实现application.yml引用项目变量的等价方案

从Maven迁移到Gradle后,要实现类似Maven中@project.artifactId@这类占位符替换,以及Banner读取项目变量,有两种可靠的实现方式,解决你之前配置不生效的问题:

方案一:构建时直接替换application.yml占位符

通过Gradle的processResources任务,在资源处理阶段直接替换yml中的占位符,和Maven的资源过滤逻辑完全等价。

配置示例(Groovy DSL)

processResources {
    // 仅对application.yml生效,避免影响其他资源文件
    filesMatching('application.yml') {
        // 传入需要替换的项目变量
        expand(
            project: [
                artifactId: project.name, // Gradle中project.name对应Maven的artifactId
                version: project.version,
                name: project.description ?: project.name, // 用项目描述或名称作为app名称
                description: project.description
            ]
        )
        // 关键:转义Spring原生的${}语法,防止Gradle提前替换导致Spring无法识别
        filter { String line ->
            line.replace('${', '\\${')
        }
    }
}

application.yml中使用方式

info:
  app:
    name: @project.name@
    version: @project.version@
    artifact-id: @project.artifactId@
    description: @project.description@

常见失效原因

  • 未指定filesMatching,导致目标文件未被匹配处理
  • 未转义Spring的${}语法,Gradle提前替换后Spring运行时无法解析
  • 占位符格式与传入的map键不匹配(比如用了@artifactId@但传入的是project.artifactId)

方案二:Spring Boot Build Info 配置绑定

利用Spring Boot的buildInfo插件生成构建信息文件,在运行时通过配置绑定读取,适合需要动态获取构建信息的场景。

配置示例(Groovy DSL)

springBoot {
    buildInfo()
    
    // 可选:自定义扩展构建信息字段
    buildInfo {
        properties {
            additional = [
                'app.description': project.description,
                'app.team': 'your-team'
            ]
        }
    }
}

application.yml中使用方式

Spring Boot会自动读取生成的META-INF/build-info.properties,通过build.*前缀引用:

info:
  app:
    name: ${build.name}
    version: ${build.version}
    artifact: ${build.artifact}
    description: ${build.app.description} # 自定义字段

Banner中使用方式

在banner.txt中直接用Spring的占位符读取:

${build.name} v${build.version}
${build.app.description}

常见失效原因

  • spring-boot-gradle-plugin版本过低(需2.x及以上)
  • 自定义字段未通过additional属性添加,无法被Spring识别
  • 手动修改了资源路径,导致build-info.properties未被正确加载

方案选择建议

  • 如果需要构建后yml文件中是硬编码的固定值,选方案一,和Maven的资源过滤行为完全一致
  • 如果需要运行时灵活获取构建信息(比如支持环境变量覆盖),或者要在多个环境中复用配置,选方案二

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:40:05