Gradle 在执行单元测试时构建每个子项目

Gradle builds every subproject when a unit test is executed

我有一个项目由多个子项目组成,这些子项目在 settings.gradle 文件中定义。

每当我 运行 对其中一个项目进行单元测试时,它总是 "configures" 并再次编译相关模块,即使它们没有任何变化。

这真的很痛苦,因为需要一段时间才能完成。我之前在同一个项目上没有这个问题,但是突然出现了。任何想法如何解决它? 我将 intellij 用于 IDE 并使用 gradle 进行构建。输出如下所示:

> Configure project :xx1
compiling YYYY
> Configure project :xx2
compiling YYYY
> Configure project :xx3
compiling YYYY
> Configure project :xx4
compiling YYYY

您可能已经知道,如果 UP-TO-DATE 检查失败,任务只会 运行。任务的 UP-TO-DATE 检查将

  • 获取当前任务输入的哈希值
  • 获取当前任务输出的哈希值
  • 将当前哈希值与前一个 运行 任务的哈希值进行比较
  • 仅当两个当前哈希值都与先前的哈希值相匹配时,才认为该任务UP-TO-DATE

尝试 运行宁 gradle 传递 -i 标志(或 --info)以查看 UP-TO-DATE 检查的结果。我猜某个任务的 inputs/outputs 配置不正确,导致 UP-TO-DATE 检查在任务树中的某处失败。也许您正在某处使用当前 date/time 作为任务输入? (不要这样做!)。也许两个任务正在将文件复制到同一目录? (不要这样做)

验证构建的一个好方法是:

  1. 运行 干净的构建
  2. 运行 再次构建而不清理

在完美世界中,第二个构建不会执行任何工作。如果第二个构建执行任何任务,则可能有一些任务 inputs/outputs 配置不正确