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

IDEA 2020.2.1运行Maven项目Yaml扫描@字符报错如何解决

问题排查与解决思路

该报错核心原因是YAML配置文件中@project.artifactId@这类Maven占位符未被正确替换,SnakeYAML直接读取到原始@字符触发解析失败,按以下顺序逐一排查即可定位问题:

  • 校验pom.xml资源过滤配置
    确认<build>节点下是否正确开启了YAML文件所在目录的资源过滤。默认YAML文件存于src/main/resources目录,需保证该目录的filtering配置为true,参考配置如下:
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    
    如果项目自定义了资源存储路径,需将对应路径补充到上述resource配置中,避免Maven扫描不到配置文件。
  • 校验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即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:45:37