Plugins 当gradle的一个插件发生变化时,为什么gradle不重建?

Plugins 当gradle的一个插件发生变化时,为什么gradle不重建?,plugins,build,gradle,task,Plugins,Build,Gradle,Task,我创建了一个插件,其中包含一个生成一些java代码的任务,然后在以后的任务中编译这些java代码。一切正常 但我看到,当我在插件中更改任务时,Gradle正在重建该插件,但当它检查任务是否应该运行时,它只是说是最新的。当一个插件改变时,它将永远不会是最新的,这难道不是更有意义吗 当我使用从Maven Central下载的新版本插件时,我看到了相同的行为。我总是需要做一个手动清洁,以确保一切都是建设,因为它应该是 这就是它的意图吗?有没有办法改变这种行为?我认为在Gradle中,任务是否是最新的取

我创建了一个插件,其中包含一个生成一些java代码的任务,然后在以后的任务中编译这些java代码。一切正常

但我看到,当我在插件中更改任务时,Gradle正在重建该插件,但当它检查任务是否应该运行时,它只是说是最新的。当一个插件改变时,它将永远不会是最新的,这难道不是更有意义吗

当我使用从Maven Central下载的新版本插件时,我看到了相同的行为。我总是需要做一个手动清洁,以确保一切都是建设,因为它应该是


这就是它的意图吗?有没有办法改变这种行为?

我认为在Gradle中,任务是否是最新的取决于输入和输出是否与缓存中的快照不同。插件中的一行代码更改不一定会改变它定义的任务的输入和输出。Gradle怎么知道插件中的哪一行会影响到哪一个任务?好吧,在我看来,当一个插件自上次构建以来发生了更改时,该插件中的每个任务都应该重新构建。因为它永远无法确定它将影响什么任务。如果你的存储库很小,你可以负担得起重新运行每个任务,即使不是由插件创建的。但在企业级大型存储库中,仅配置所有模块而不是执行任务可能需要30分钟。如果您的更改没有影响大多数任务,那么这样做是不明智的。我认为Gradle团队只是将判断权留给用户。如果您愿意,您可以运行
gradlebuild--reruntasks
来强制重新运行。这没有任何意义。建造多长时间无关紧要。如果未重新运行任务,则生成结果不正确。所以你无论如何都需要做一次清洁。这可能需要更长的时间,这取决于任务在插件上的分配方式。任何构建系统中最重要的一点是,当你进行构建时,你可以期望得到正确的结果。我同意,如果Gradle能够自动识别插件中的所有任务及其依赖项,并在插件更改后重新运行它们,那将是一件好事。但要做到这一点,即使不是不可能,也是非常困难的。如果他们曾经做出选择,显然他们选择了不重新运行任何一个,而不是每一个。