Spring Boot测试环境application.yml引用pom属性@符号解析报错问题
问题根因
- Spring Boot 默认继承的父POM仅对
src/main/resources目录开启了Maven资源过滤(自动替换@包裹的Maven属性),src/test/resources目录的过滤功能默认未启用 - 测试执行时
@modelVersion@没有被替换为POM中的实际值,直接保留@开头的原始字符串,不符合YAML语法规范,因此抛出SnakeYAML解析异常 - 给
@modelVersion@加单引号后仅解决了YAML语法报错,但因为过滤未开启,属性值不会被替换,所以读取到的是原始字符串
解决方案
在你的pom.xml的<build>节点下添加测试资源过滤配置即可,配置示例如下:
<build> <!-- 原有主资源配置无需修改,默认继承spring-boot-starter-parent的规则即可 --> <testResources> <testResource> <directory>src/test/resources</directory> <filtering>true</filtering> <!-- 仅使用@作为占位符,避免和Spring本身的${}配置占位符冲突 --> <delimiters> <delimiter>@</delimiter> </delimiters> <useDefaultDelimiters>false</useDefaultDelimiters> </testResource> </testResources> </build>
配置完成后执行mvn clean test清理历史缓存的测试配置文件,再运行测试即可正常读取到替换后的属性值。
内容的提问来源于stack exchange,提问作者McCoy
相关产品推荐
相关产品推荐

