【Android Gradle 插件】自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )

Android Plugin DSL Reference 参考文档 :





一、Task#shouldRunAfter 函数



Task#shouldRunAfter 函数的作用是为 Gradle 任务设置该任务执行时 , 应该在某个任务之后 ;


Task#shouldRunAfter 函数原型 :

TaskDependency shouldRunAfter​(Object... paths)

Specifies that this task should run after all of the supplied tasks.
指定此任务应在所有提供的任务之后运行。

 task taskY {
    
    
     shouldRunAfter "taskX"
 }
 
For each supplied task, this action adds a task 'ordering', 
and does not specify a 'dependency' between the tasks. 
As such, it is still possible to execute 'taskY' without first executing the 'taskX' in the example.
对于每个提供的任务,此操作添加一个任务“排序”,
并且不指定任务之间的“依赖关系”。
因此,仍然可以在不首先执行示例中的“taskX”的情况下执行“taskY”。

See here for a description of the types of objects which can be used to specify an ordering relationship.
有关可用于指定排序关系的对象类型的描述,请参阅此处。

Parameters:
paths - The dependencies to add to this task.
        要添加到此任务的依赖项。
Returns:
the task object this method is applied to
应用此方法的任务对象

文档地址 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html#shouldRunAfter-java.lang.Object…-





二、Task#shouldRunAfter 函数 、Task#mustRunAfter 函数、Task#dependsOn 函数 使用场景对比



Task#shouldRunAfter 函数 与 Task#mustRunAfter 函数 设置的任务 , 一般情况下先执行该设置的任务 ,

Task#shouldRunAfter 函数 没有 Task#mustRunAfter 函数 严格 ,

如果是在并行编译执行任务的情况下 , Task#shouldRunAfter 函数设置的任务可能会在目标任务之后执行 ,

但是 Task#mustRunAfter 函数设置的任务必须在目标函数之前执行 ;


Task#shouldRunAfter 函数 , Task#mustRunAfter 函数 , Task#dependsOn 函数 使用场景对比 :

A.dependsOn B : 执行 A 任务时 , 必须先执行 B , 否则 A 任务无法执行 ;

A.mustRunAfter B : 如果需要执行 A 任务 , 则必须在 B 任务之后 ;

  • 假如这两个任务都需要执行 , 则先执行 B 任务 , 再执行 A 任务 ; 如果并行执行 A B 两个任务 , 也必须先 B 后 A ;
  • 假如只需要执行 A 任务 , 则不需要考虑 B 任务 ;
  • 假如只需要执行 B 任务 , 也不需要考虑 A 任务 ;

A.shouldRunAfter B : 如果需要执行 A 任务 , 则应该在 B 任务之后 ; A 任务 与 B 任务 不强制进行要求 ;

  • 假如这两个任务都需要执行 , 则先执行 B 任务 , 再执行 A 任务 ; 如果并行执行 A B 两个任务 , A B 任务执行的先后顺序不做要求 ;
  • 假如只需要执行 A 任务 , 则不需要考虑 B 任务 ;
  • 假如只需要执行 B 任务 , 也不需要考虑 A 任务 ;

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/126978108