Gradle:在哪里为distZip任务定义了任务依赖项

时间:2019-08-27 10:12:16

标签: gradle gradle-plugin gradle-task

我正在使用gradle application plugin

我注意到:

  1. distZip任务在汇编任务之前运行。
  2. 我可以看到 来自文档(上面的链接),并在我的gradle运行期间确认, distZip任务取决于:jar,startScripts任务

所以执行看起来像这样:

> Task :my-app:processResources
> Task :my-app:compileJava
> Task :my-app:classes
> Task :my-app:jar
> Task :my-app:startScripts
> Task :my-app:distTar
> Task :my-app:distZip
> Task :my-app:assemble

翻阅ApplicationPlugin.java和/或DistributionPlugin.java中的代码,我希望看到定义的任务依赖项。  例如像这样的东西:

distZipTask.dependsOn(jarTask)
distZipTask.dependsOn(createScriptsTask)
assembleTask.dependsOn(distZipTask)

...但是我在Java代码中找不到类似的东西。

如果有人可以将我指向寻找该“任务”如何联系的方向,我将非常感激。

1 个答案:

答案 0 :(得分:1)

Gradle可以从任务输入中确定隐式任务依赖性。如果一个任务(的输出)用作另一个任务的输入,则Gradle可以得出该任务必须具有依赖性的信息。此功能称为incremental build support,因为它还支持检查输入或输出中的更改以在输入未更改的情况下跳过任务。

对于您的示例,任务依赖性在文件ApplicationPlugin.java的{​​{3}}和line 197中隐式定义:

libChildSpec.from(jar);
...
binChildSpec.from(startScripts);

这些行中的参数是各自的任务(准确地说是:任务的提供者)。 from方法通常可用于定义文件操作的来源(例如,复制,压缩...)。因此,我们将任务jarstartScripts的结果(输出)定义为某些操作(CopySpec)的来源。然后将所得的CopySpec对象传递给任务distZipdistTar。当任务尝试解析定义的源时,它会找到任务jarstartScripts并自行定义它们之间的依赖关系。

请注意,上述任务assemble是所谓的生命周期任务。它不会执行任何操作,但可以用于将任务组织到构建阶段(就像buildcheck一样。)