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

