一、前言:
既然我们可以声明任务了,那么我们应该思考任务之间的依赖关系了。例如,我们不能再编译源码之前保存我们的Jar库。我们通过任务依赖性和顺序性对任务之间的关系进行建模。
我们会讨论三种方式去配置任务之间关系:
“dependsOn”,”finalizedBy”,和”mustRunAfter”。
二、三种方式:
第一种:dependOn
task A dependOn task B,如果在任务B未完成的情况下,任务A无法进行其工作,换句话说任务A依赖于任务B。我们举一个熟悉的例子,你早晨起床的时候,如果你不首先穿袜子的话是不能穿鞋的。下面我们看具体的例子:
具体代码:
运行结果:
在穿鞋的任务里我们仅仅传递了穿袜子任务的名字。下面我们使用静默的方式运行一下穿鞋的任务,这样的话我们就不会看到那些诊断输出了。在这里我们使用指令“gradle –qputonShoes”下面我们查看一下运行结果:
注意:如果此时使用命令“gradle tasks”,在控制台上不能看到“putOnSocks”。因为Gradle假定“putOnSocks”任务存在是为了帮助完成“putOnShoes”的。同时可以使用“gradletasks -all”查看“outOnSocks”任务。
第二种:finalizedBy
task A finalizedBy task B,就是说每一次task A运行,task B都会紧随其后运行。继续我们的例子,每一次你吃早餐,你需要紧随其后进行刷牙。我们来看一下具体例子:
具体代码:
因此我们看一下在试图告诉gradle吃早餐的时候,会发生什么:
第三种:mustRunAfter
mustRunAfter的使用例子不太明显,假设我们有一个长期运行的过程该过程不可能失败。如向一个持续集成的服务器部署工具,我们还有一个短期运行的任务,该任务很可能会失败,比如运行单元测试。这两个任务没有相互依赖关系,但是如果我们将两个任务同时进行,我们真的希望在综合测试前进行单元测试。
继续进行我们日常生活中的例子。我们继续洗澡,并喷洒一种像香水或者古龙水的香味。喷洒香味不需要洗澡,洗澡也不需要喷洒香味。但是我们既要洗澡也要喷洒香味我们真的应该先洗澡。我们来看一下具体的例子:
具体代码:
现在如果我们让Gradle喷洒香味,并洗澡吧: