IDEA 2020.2.1运行Maven项目Yaml扫描@字符报错如何解决
问题排查与解决思路
该报错核心原因是YAML配置文件中@project.artifactId@这类Maven占位符未被正确替换,SnakeYAML直接读取到原始@字符触发解析失败,按以下顺序逐一排查即可定位问题:
- 校验pom.xml资源过滤配置
确认<build>节点下是否正确开启了YAML文件所在目录的资源过滤。默认YAML文件存于src/main/resources目录,需保证该目录的filtering配置为true,参考配置如下:
如果项目自定义了资源存储路径,需将对应路径补充到上述resource配置中,避免Maven扫描不到配置文件。<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> - 校验Maven资源插件配置
若显式指定了maven-resources-plugin版本,需将版本升级到3.2.0以上,低版本插件对UTF-8编码的YAML文件存在替换兼容问题;同时检查是否自定义了占位符分隔符,若将默认的@分隔符修改为其他格式,需同步调整YAML文件中的占位符写法,避免匹配失败。参考插件配置:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> </plugin> - 校验IDEA构建配置
打开Settings -> Build, Execution, Deployment -> Build Tools -> Maven,确认当前项目绑定的Maven路径、settings.xml路径与项目实际使用的一致,不要使用IDEA默认捆绑的Maven版本(部分旧版本存在资源过滤逻辑缺失的bug);同时勾选Delegate IDE build/run actions to Maven选项,让IDEA的构建、启动动作完全交由Maven执行,避免IDEA独立编译时跳过Maven的资源替换流程。 - 验证占位符实际替换结果
在项目根目录执行mvn clean compile命令,执行完成后打开target/classes目录下对应的YAML文件,查看@project.artifactId@是否已经被替换为实际的项目artifactId:- 如果target目录下的文件仍保留原始
@占位符,说明Maven侧的资源过滤配置仍有问题,回到前两步检查配置是否写在生效的pom节点中(多模块项目需注意,父模块的资源过滤配置不会自动被子模块继承,需在当前运行模块的pom中单独配置) - 如果target目录下的文件已经完成替换,但启动仍报错,说明IDEA读取了源码目录的原始配置文件而非target下的编译产物,执行File -> Invalidate Caches... 勾选清除所有缓存后重启IDEA即可。
- 如果target目录下的文件仍保留原始
内容的提问来源于stack exchange,提问作者Archibald
相关产品推荐
相关产品推荐

