如何配置Gradle跨模块自定义任务依赖:模块B任务先于模块A执行
解决方案
默认的implementation project(":module-B")仅建立了模块间编译、运行时的产物依赖,Gradle不会自动关联自定义任务的执行顺序,需要显式配置任务依赖关系,有两种常用方式:
方式一:直接关联两个自定义任务
在模块A的build.gradle(或build.gradle.kts)中,精准指定模块A的自定义任务1依赖于模块B的自定义任务1:
Groovy DSL
// 获取模块B的customTask1任务 def moduleBCustomTask = project(':module-B').tasks.named('customTask1').get() // 配置模块A的customTask1依赖该任务 tasks.named('customTask1') { dependsOn moduleBCustomTask }
Kotlin DSL
val moduleBCustomTask = project(":module-B").tasks.named("customTask1").get() tasks.named<DefaultTask>("customTask1") { dependsOn(moduleBCustomTask) }
这种方式仅控制目标自定义任务的执行顺序,不会干扰其他任务的构建流程。
方式二:将模块B的自定义任务绑定到默认构建流程
如果模块B的customTask1是生成其核心产物的必要环节,可以在模块B的build.gradle中,将该任务关联到默认的assemble任务:
Groovy DSL
tasks.named('assemble') { dependsOn 'customTask1' }
Kotlin DSL
tasks.named("assemble") { dependsOn("customTask1") }
此时模块A依赖模块B的implementation时,Gradle会自动触发模块B的assemble任务,进而间接执行customTask1,适合该任务是模块B构建流程中不可或缺的部分的场景。
内容的提问来源于stack exchange,提问作者Cheetah
相关产品推荐
相关产品推荐

