为什么我会跑步' gradle clean build'而不是#gradle build'?根据我的理解,gradle可以检测源更改并在需要时更新最终工件。那么为什么我仍然需要清洁' ?
答案 0 :(得分:56)
clean task由java plugin定义,它只是删除buildDir文件夹,从而清除包括以前版本中不再相关的剩余内容的所有内容。不这样做可能会导致不洁构建,这可能会因先前构建产生的构建工件而被破坏。
作为一个示例,假设您的构建包含多个失败的测试,并且您认为这些测试已过时,因此需要将其删除。如果不清理测试结果(使用cleanTest任务)或完全构建(通过运行clean任务),您将无法使用失败的测试结果,这将导致构建失败。资源/类从源中删除但仍保留在未清理的构建文件夹中也会发生类似的副作用。
答案 1 :(得分:1)
像buck这样的其他构建工具会检测到某些测试被删除,并且无需运行干净的目标就无法运行它们。我认为这是gradle的陷阱。
答案 2 :(得分:0)
答案 3 :(得分:0)
您不需要运行clean
任务。
Gradle将跟踪任务依赖性并为您清理适当的部件。
这是我创建的example Gradle project,用于显示接受的答案不正确。
如果自定义任务不能很好地跟踪其依赖关系(它们已被窃听),则clean
是一种解决方法。