如何判断Gradle任务是否定义inputs、outputs及test任务跳过条件?
Gradle任务inputs/outputs规则与test任务跳过逻辑说明
核心概念:任务inputs与outputs
Gradle的增量构建能力完全基于任务的inputs和outputs配置实现:
inputs指代任务执行所依赖的所有输入项,包含源文件、配置参数、环境变量、依赖库版本等所有可能影响任务执行结果的内容outputs指代任务执行完成后生成的所有产物,比如编译后的字节码文件、生成的文档、测试报告等
Gradle执行任务前会对所有inputs生成哈希校验值,同时校验outputs的存在状态和哈希值,如果和上一次该任务成功执行后的校验结果完全匹配,就会自动跳过该任务,标记为UP-TO-DATE。
test任务是否支持自动跳过
Java、Kotlin等官方JVM生态插件自带的test任务,默认已经预置了标准的inputs和outputs规则,完全支持增量构建下的自动跳过,无需额外配置。
test任务被跳过的具体触发条件
同时满足以下所有条件时,test任务会被自动跳过:
- 两次构建间隔中,
test任务的所有inputs没有发生任何变更,包括:测试代码、被测试的业务代码、测试运行配置(JVM参数、测试用例过滤规则、环境变量、系统属性)、测试依赖的第三方库版本 - 上一次
test任务执行生成的所有outputs没有被修改或删除,默认包含build/test-results/test下的测试结果文件、build/reports/tests/test下的测试报告文件 - 构建命令没有添加
--rerun-tasks等强制重跑所有任务的参数 - 项目构建脚本中没有配置
test.outputs.upToDateWhen { false }这类强制标记test任务永远不处于最新状态的逻辑 - 没有其他被执行的任务强制依赖
test的输出且需要重跑的场景
内容的提问来源于stack exchange,提问作者ndueck
相关产品推荐
相关产品推荐

