gradle - Gradle:为 distZip 任务定义的任务依赖项在哪里
问题描述
我正在使用gradle 应用程序插件。
我注意到:
- distZip 任务在 assemble 任务之前运行。
- 我可以从文档(上面的链接)中看到,并在我的 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 代码中找不到类似的东西。
如果有人能指出我在哪里寻找这些任务是如何“链接”的,我将不胜感激。
解决方案
Gradle 可以从任务输入中确定隐式任务依赖关系。如果一个任务(的输出)被用作另一个任务的输入,Gradle 可以推导出该任务必须存在依赖关系。此功能称为增量构建支持,因为它还支持检查输入或输出中的更改以在输入未更改时跳过任务。
关于您的示例,任务依赖项在文件的第 197行和第 208ApplicationPlugin.java
行中隐式定义:
libChildSpec.from(jar);
...
binChildSpec.from(startScripts);
这些行中的参数是各自的任务(准确地说:任务的提供者)。该from
方法通常可用于定义文件操作的来源(例如复制、压缩...)。所以我们定义了任务的结果(输出)jar
并startScripts
作为一些操作的来源(CopySpec
)。然后将生成的CopySpec
对象传递给任务distZip
和distTar
. 当一个任务试图解析定义的源时,它会找到任务jar
并startScripts
自行定义对它们的依赖关系。
请注意,上述任务assemble
是所谓的生命周期任务。它不运行任何操作,但可用于将任务组织到构建阶段(就像build
和check
)。
推荐阅读
- c - 为什么我无法使用 msgrcv() 访问消息队列中的消息文本?
- django - Django templates - include and repeat the block contents
- python - How to extract symbols from Image?
- c# - Capturing Receipt Data from receipt printer after transaction c#
- python - pytest 的错误分布NotFound
- opengl - 如何增加OpenGL中的窗口深度?
- git - 在 docker-compose up 之后运行 Dockerfile 命令
- javascript - 滚动到 id 只向下滚动
- machine-learning - Genisim doc2vec:短文档是如何处理的?
- android - Android 日期选择器没有清楚地显示标题或数字