为什么 运行 'gradle clean build' 而不是 'gradle build'?

Why run 'gradle clean build' instead of 'gradle build'?

为什么我会 运行 gradle clean build 而不是 gradle build

据我了解,Gradle 可以检测源更改并在需要时更新最终工件。那为什么我还需要 clean?

clean task is defined by the java plugin 它只是删除了 buildDir 文件夹,从而清除了所有内容,包括不再相关的先前构建的剩余部分。不这样做可能会导致不干净的构建,这可能会由于以前构建产生的构建工件而被破坏。

举个例子,假设您的构建包含多个失败的测试,并且您认为这些测试已过时,因此需要将其删除。如果不清理测试结果(使用 cleanTest 任务)或完全构建(通过 运行 clean 任务),您将陷入失败的测试结果,这将导致构建失败。 resources/classes 从源中删除但保留在未清理的构建文件夹中时也会发生类似的副作用。

其他构建工具(如 buck)会检测到某些测试已被删除,并且在不需要 运行 清理目标的情况下不会 运行 它们。我认为这是 gradle.

的陷阱

它删除了构建目录。 (构建包含 gradle 操作的输出)

您不需要运行 clean 任务。 Gradle 将跟踪任务依赖关系并为您清理适当的部分。 这是我创建的 example Gradle project 以显示接受的答案不正确。

如果自定义任务不能很好地跟踪它们的依赖关系(它们被窃听),那么 clean 是一种解决方法。