2015-03-13 89 views
23

为什么我要运行'gradle clean build'而不是'gradle build'?据我所知,gradle可以检测源变化并在需要时更新最终的工件。那么为什么我仍然需要“清洁”?为什么要运行'gradle clean'?

+1

为了确保您得到的错误不是来自Gradle的错误索引。或者如果您添加了更改每个依赖项的新库。 – Tschallacka 2015-03-13 09:31:43

+0

“gradel clean build”有助于删除上次构建时生成的所有依赖关系,并从服务器获取新的依赖关系并构建您的项目。谢谢 – Naitik 2015-03-13 09:32:53

+2

@Naitik,那不对。 – Opal 2015-03-13 09:41:51

回答

33

clean taskjava plugin定义,它只是删除buildDir文件夹,从而清除所有内容,包括以前版本中不再相关的剩余部分。不这样做可能会导致不洁的构建,由于构建了以前构建产生的构件,可能会破坏构建。

作为一个例子,假设您的版本包含多个失败的测试,并且您认为这些测试已过时,因此需要删除。如果没有清理测试结果(使用cleanTest任务)或完全构建(通过运行干净的任务),您将会遇到失败的测试结果,从而导致构建失败。类似的副作用也可能发生在从资源中删除的资源/类中,但仍保留在未清理的构建文件夹中。

+0

感谢您的回答。我知道干净的是什么,但我不知道什么时候有用。你能否提供这样一个例子,以便更好地理解?谢谢。 – 2015-03-13 11:41:23

+0

当然。假设您的版本包含多个失败的测试,并且您认为这些测试已过时,因此需要删除。如果没有清理测试结果(使用cleanTest任务)或完全构建(通过运行干净的任务),您将会遇到失败的测试结果,从而导致构建失败。类似的副作用也可能发生在从资源中删除的资源/类中,但仍保留在未清理的构建文件夹中。 – 2015-03-13 12:03:32

+0

有道理。你可以编辑你的答案,包括这个例子,所以我可以标记为正确的? – 2015-03-13 12:41:54

1

像buck这样的其他构建工具会检测到某些测试已被删除,并且在没有运行干净目标的需求时不会运行它们。我认为这是Gradle的陷阱。

+0

这大多不准确,Gradle有输入和输出跟踪,几乎所有的任务都可以处理这种情况。 – mkobit 2016-10-26 02:35:32