Gradle多项目构建出现duplicate handling strategy未配置错误如何解决?
解决方案
Gradle 7及以上版本对归档、复制类任务默认启用重复文件检测,遇到重名文件会直接抛出构建失败错误,可通过以下两种方式配置重复处理策略解决问题:
方案1:单独配置报错的distTar任务
直接在Project B的build.gradle中添加如下配置即可:
Groovy语法
import org.gradle.api.file.DuplicatesStrategy tasks.named('distTar') { duplicatesStrategy = DuplicatesStrategy.EXCLUDE }
Kotlin DSL语法
import org.gradle.api.file.DuplicatesStrategy tasks.named<Tar>("distTar") { duplicatesStrategy.set(DuplicatesStrategy.EXCLUDE) }
方案2:全局配置所有同类任务的重复策略
如果多个归档/复制任务都存在同类报错,可以在根项目的build.gradle中添加全局配置,一次性适配所有项目的相关任务:
Groovy语法
import org.gradle.api.file.DuplicatesStrategy allprojects { tasks.withType(Copy) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } tasks.withType(Tar) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } tasks.withType(Zip) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } }
Kotlin DSL语法
import org.gradle.api.file.DuplicatesStrategy allprojects { tasks.withType<Copy> { duplicatesStrategy.set(DuplicatesStrategy.EXCLUDE) } tasks.withType<Tar> { duplicatesStrategy.set(DuplicatesStrategy.EXCLUDE) } tasks.withType<Zip> { duplicatesStrategy.set(DuplicatesStrategy.EXCLUDE) } }
常用重复策略说明
- EXCLUDE:忽略重复文件,仅保留第一个被加入的版本,绝大多数场景都适用
- WARN:遇到重复文件仅输出警告日志,不会阻断构建
- INCLUDE:允许重复文件存入归档包,不推荐使用,会导致部分解压工具报错
- FAIL:遇到重复文件直接抛出错误,是Gradle 7+的默认配置
补充说明:如果想要从根源解决问题,可以先排查Project B的依赖配置,确认是否同时从多个路径引入了同名的
projecta.jar,清理冗余依赖即可避免重复问题。
内容的提问来源于stack exchange,提问作者viglu
相关产品推荐
相关产品推荐

