第五讲 任务依赖关系和排序

来源:互联网 发布:91助手苹果mac版下载 编辑:程序博客网 时间:2024/05/22 12:56

一、前言:

既然我们可以声明任务了,那么我们应该思考任务之间的依赖关系了。例如,我们不能再编译源码之前保存我们的Jar库。我们通过任务依赖性和顺序性对任务之间的关系进行建模。

我们会讨论三种方式去配置任务之间关系:

dependsOn”,”finalizedBy”,和”mustRunAfter”。

二、三种方式:

第一种:dependOn

task A dependOn task B,如果在任务B未完成的情况下,任务A无法进行其工作,换句话说任务A依赖于任务B。我们举一个熟悉的例子,你早晨起床的时候,如果你不首先穿袜子的话是不能穿鞋的。下面我们看具体的例子:

具体代码:


运行结果:

在穿鞋的任务里我们仅仅传递了穿袜子任务的名字。下面我们使用静默的方式运行一下穿鞋的任务,这样的话我们就不会看到那些诊断输出了。在这里我们使用指令“gradleqputonShoes”下面我们查看一下运行结果:

注意:如果此时使用命令“gradle tasks”,在控制台上不能看到“putOnSocks”。因为Gradle假定“putOnSocks”任务存在是为了帮助完成“putOnShoes”的。同时可以使用“gradletasks -all”查看“outOnSocks”任务。

第二种:finalizedBy

task  A finalizedBy task B,就是说每一次task  A运行,task B都会紧随其后运行。继续我们的例子,每一次你吃早餐,你需要紧随其后进行刷牙。我们来看一下具体例子:

具体代码:

因此我们看一下在试图告诉gradle吃早餐的时候,会发生什么:

第三种:mustRunAfter

mustRunAfter的使用例子不太明显,假设我们有一个长期运行的过程该过程不可能失败。如向一个持续集成的服务器部署工具,我们还有一个短期运行的任务,该任务很可能会失败,比如运行单元测试。这两个任务没有相互依赖关系,但是如果我们将两个任务同时进行,我们真的希望在综合测试前进行单元测试。

继续进行我们日常生活中的例子。我们继续洗澡,并喷洒一种像香水或者古龙水的香味。喷洒香味不需要洗澡,洗澡也不需要喷洒香味。但是我们既要洗澡也要喷洒香味我们真的应该先洗澡。我们来看一下具体的例子:

具体代码:

现在如果我们让Gradle喷洒香味,并洗澡吧:


原创粉丝点击