Gradle 7.1.1 不执行includedBuild及其传递依赖项目测试的问题
问题根因
这是Gradle复合构建(includeBuild)的默认设计逻辑:
- 当你通过
includeBuild引入依赖项目时,Gradle默认仅按需拉取构建上游项目所需的产物,比如core-ssl依赖core-datawrapper的jar包,core-datawrapper又依赖core-util的jar包,所以构建core-ssl时只会触发被依赖项目到jar的前置任务链路,和jar产出无关的test、check等任务不会被自动触发。 - 你记忆的
build任务依赖assemble和test的规则是针对单个项目自身的任务依赖逻辑,该逻辑不会自动传递到复合构建引入的外部项目。同理clean、publish任务默认也只会作用于当前执行命令的项目树,不会递归到includeBuild引入的项目。
解决方案
无需为每个子项目单独配置,可通过全局任务绑定规则实现自动传递,后续新增依赖项目也无需额外调整:
在Gradle全局初始化脚本init.gradle(对所有项目生效)或者当前仓库的根build.gradle中添加如下配置即可:
gradle.taskGraph.whenReady { graph -> // 筛选需要透传到依赖项目的任务类型 def needPassTasks = graph.allTasks.findAll { it.name in ['build', 'clean', 'publish'] } if (needPassTasks.empty) return // 给所有复合构建引入的项目绑定同名任务依赖 gradle.includedBuilds.each { includedBuild -> needPassTasks.each { task -> task.dependsOn includedBuild.task(":${task.name}") } } }
配置生效后,执行build、clean、publish任意一个任务时,都会自动触发所有传递依赖的includeBuild项目的同名任务。
内容的提问来源于stack exchange,提问作者Dean Hiller
相关产品推荐
相关产品推荐

