You need to enable JavaScript to run this app. Quarkus使用Maven资源过滤时如何获取maven.build.timestamp
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus使用Maven资源过滤时如何获取maven.build.timestamp

问题根因
  • 现有Maven资源过滤规则仅针对name-frontend/dist/name-frontend目录下的前端静态资源生效,未将Quarkus核心的src/main/resources/application.properties纳入Maven占位符替换流程
  • Maven未提前替换配置文件中的${maven.build.timestamp}占位符时,Quarkus自身的配置解析引擎会尝试识别该占位符,但引擎不感知Maven内置的构建变量,最终抛出SRCFG00011的变量找不到错误
  • 之前可正常读取的版本、名称属性均为硬编码值,不依赖Maven占位符替换,因此不受上述问题影响
修复步骤

1. 配置全局主资源过滤规则

在pom.xml的<build>节点下添加全局资源配置,确保Quarkus核心配置文件被Maven提前完成占位符替换,原有的前端静态资源拷贝逻辑可原样保留,不会产生冲突:

<resources>
    <!-- 主资源目录,开启占位符替换 -->
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
            <!-- 排除静态web资源,避免被误替换 -->
            <exclude>META-INF/resources/**</exclude>
        </excludes>
    </resource>
    <!-- 静态web资源不开启过滤 -->
    <resource>
        <directory>src/main/resources/META-INF/resources</directory>
        <filtering>false</filtering>
    </resource>
</resources>

2. 配置构建时间戳格式

在pom.xml的<properties>节点下自定义Maven构建时间戳的输出格式,避免默认格式不符合业务需求:

<properties>
    <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
</properties>

3. 验证配置生效

执行Maven打包流程后,打开target/classes/application.properties文件,确认quarkus.application.timestamp属性的取值已被替换为实际构建时间字符串,无残留的${maven.build.timestamp}占位符,即可正常通过Java代码的@ConfigProperty注解读取构建时间值。

注意事项
  • 若使用Quarkus 3.x版本,需确保quarkus.configure-resources=true配置未被关闭,该配置默认开启,可保证Quarkus不会覆盖自定义的Maven资源过滤规则
  • 无需修改现有Java读取代码,只要Maven过滤流程正常执行,原有的@ConfigProperty(name = "quarkus.application.timestamp")注入逻辑即可正常工作
  • 如果后续发现Quarkus会对Maven替换后的内容做二次占位符解析,可自定义Maven的占位符分隔符,避开和Quarkus默认配置占位符的冲突,无需全局修改占位符规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 12:45:05