Gradle7.3+Java17升级出现processIntTestResources重复条目未设置处理策略错误
Gradle 7.x 升级 processIntTestResources 重复文件报错排查方案
Gradle 7.0+ 修改了Copy类型任务的默认行为,未显式声明重复策略时遇到重复文件会直接报错,而processIntTestResources是Java插件根据你定义的intTest sourceSet自动生成的Copy类型任务,无需你手动声明,所以会触发报错。
以下是可行的排查&解决方向:
- 全局统一配置所有Copy任务策略
你之前的配置未生效是因为没有指定作用于Copy类型任务,在根项目build.gradle的最外层添加如下配置即可全局生效:
如果使用Kotlin DSL,写法如下:tasks.withType(Copy) { duplicatesStrategy = DuplicatesStrategy.INCLUDE }tasks.withType<Copy> { duplicatesStrategy = DuplicatesStrategy.INCLUDE } - 单独针对集成测试资源任务配置
如果你不想全局修改所有Copy任务的行为,只需要针对报错的processIntTestResources任务单独配置即可,在对应模块的build.gradle中添加:tasks.named("processIntTestResources") { duplicatesStrategy = DuplicatesStrategy.INCLUDE } - 排查重复文件来源
如果你需要定位重复文件的产生原因,避免直接忽略带来的未知风险,可以执行如下命令打印任务的详细日志,查看重复文件的两个来源路径:
通常重复来源为intTest资源目录与main/test资源目录存在同名文件,或依赖的第三方Jar包中存在同名资源文件,你可以根据实际情况选择./gradlew :[root module]:[module]:processIntTestResources --infoDuplicatesStrategy.EXCLUDE/DuplicatesStrategy.FAIL等更匹配需求的策略。 - 检查插件配置覆盖
如果全局配置不生效,大概率是项目中引入的集成测试相关插件(比如官方的jvm-test-suite插件、第三方集成测试插件)对processIntTestResources任务的配置优先级更高,覆盖了全局配置,这种情况使用上面的单任务配置即可生效。
内容的提问来源于stack exchange,提问作者Ryan Schaefer
相关产品推荐
相关产品推荐

