You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle多子项目如何单独运行infra模块test且不触发依赖库测试

解决方案

你可以通过以下两种配置方式实现需求,两种方式都不会影响gradlew test执行全模块测试的逻辑。

方案1:根目录全局配置(最匹配需求)

在项目根目录的build.gradle(Groovy DSL)中添加以下配置,Gradle会在任务构建图生成后自动判断当前执行场景,单独跑infra测试时自动禁用依赖库的测试任务:

gradle.taskGraph.whenReady { graph ->
    // 判断当前是否仅触发了infra模块的测试,未触发全局测试
    boolean onlyRunInfraTest = graph.allTasks.any { it.path == ':app:infra:test' } 
            && !graph.allTasks.any { it.path == ':test' }
    if (onlyRunInfraTest) {
        project(':app:libs:lib1').tasks.test.enabled = false
        project(':app:libs:lib2').tasks.test.enabled = false
    }
}

如果你使用Kotlin DSL,对应写法如下:

gradle.taskGraph.whenReady {
    val onlyRunInfraTest = allTasks.any { it.path == ":app:infra:test" } 
            && !allTasks.any { it.path == ":test" }
    if (onlyRunInfraTest) {
        project(":app:libs:lib1").tasks.named<Test>("test").configure { it.enabled = false }
        project(":app:libs:lib2").tasks.named<Test>("test").configure { it.enabled = false }
    }
}

方案2:infra模块内直接移除测试依赖

如果无论什么场景下跑infra的测试都不需要触发依赖库的测试,可以直接在app/infra/build.gradle中移除test任务对依赖库测试的依赖:

tasks.named('test') {
    dependsOn.remove(project(':app:libs:lib1').tasks.test)
    dependsOn.remove(project(':app:libs:lib2').tasks.test)
}

临时跳过方案

如果只是单次需要跳过依赖库的测试,可以直接在执行命令时添加-x参数排除指定任务:

gradlew app:infra:test -x :app:libs:lib1:test -x :app:libs:lib2:test

内容的提问来源于stack exchange,提问作者Simon Gruber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:24:03