build.gradle配置sourceSets的srcDir后IDE报红但构建正常如何解决?
问题根因
该问题是STS 4.11.1内置的Gradle插件与Gradle 7.1.1的sourceSets配置解析逻辑不兼容导致的,具体原因如下:
- Gradle原生的
srcDir配置是追加逻辑,你单独添加src/test/resources/sql作为测试资源目录时,默认的src/test/resources资源目录仍然生效,命令行构建时可以正常识别两层资源目录,不会触发冲突。 - STS 4.11.1的Gradle插件对Gradle 7.x的sourceSets解析存在缺陷:它会同时将
src/test/resources和其下的子目录src/test/resources/sql都标记为独立的资源根目录,但IDE内置的Java项目校验规则不允许一个资源根目录是另一个资源根目录的子目录,因此会抛出冲突错误,显示红叉。 - 部分场景下还会触发资源重复索引问题:IDE会认为同一份资源文件可能被两个资源根目录同时索引,触发重复资源的校验报错。
解决方案
你可以根据自身需求选择对应方案解决:
- 若只是需要把
src/test/resources/sql下的文件作为测试资源,不需要额外配置:默认src/test/resources下的所有内容都会被自动识别为测试资源,直接删除多余的srcDir配置即可。 - 若确实需要单独指定
sql目录为唯一测试资源目录,将配置改为覆盖逻辑即可避免冲突:sourceSets { test { resources { srcDirs = ["src/test/resources/sql"] } } } - 升级STS到4.15及以上版本,新版本内置的Gradle插件已经修复了Gradle 7.x版本的sourceSets解析兼容性问题。
- 若不想升级STS,也可以手动在项目属性->Java Build Path中删除重复标记的
src/test/resources/sql资源目录配置,临时屏蔽报错。
内容的提问来源于stack exchange,提问作者jumping_monkey
相关产品推荐
相关产品推荐

