• 面试:gradle添加自定义task


    从Gradle生命周期到自定义Task挂接到Build构建流程全解 - 掘金

    Gradle的基本流程 - 简书 

    自定义 Task 挂机到构建流程

    我们知道,Gradle 的构建流程是通过执行一系列的 Task 任务来完成的,每一个Task完成自己独特的工作之后,就根据Task的依赖关系,执行下一个 Task 任务。如:preBuild(开始构建之前执行的Task任务)->mergeDebugResources(合并资源文件的Task任务)->assembleDebug(生成debug包的任务)。

    如果想把自己写的Task也插入到构建流程中,在运行的时候自动执行我们的Task任务,又该如何做呢?这个时候就可以通过指定Task的执行顺序,把我们的 Task 加入到构建流程中,具体来说就是:明确自己的任务需要插入到哪个任务之后或者之前,接着找到这个任务,并把自己的任务插入到这个任务的前面或者后面

    可以通过如下方式,把自定义的 Task 插入到指定的任务

    • 通过 dependsOn 或者 finalizedBy 方法指定
      • 单独使用dependsOn 方法,最好是让编译流程的 Task 依赖于自己的 Task,否则不生效
      • finalizedBy :可以单独使用,指定在某个 Task 执行结束之后,执行自己的 Task
    • 通过 mustRunAfter 结合 dependsOn 一起指定

    在 某个 Task 之前执行 自定义 Task:dependsOn

    1. afterEvaluate {
    2. // 1. 找到需要依赖自己 Task的构建流程的Task
    3. def mergeResourcesTask = tasks.findByName("mergeDebugResources")
    4. println "mergeResourcesTask=$mergeResourcesTask"
    5. // 2. 通过dependsOn 方法,插入到指定Task之前
    6. mergeResourcesTask.dependsOn(checkBigImage)
    7. }
    8. 复制代码

    插入自定义 Task 之前的 Task 依赖关系图:

    插入自定义 Task 之后的 Task 依赖关系图:

    从Task的依赖关系图可以看出,mergeDebugResources 任务确实是依赖于checkBigImage任务了,这样在运行编译app的时候,就会在执行 mergeDebugResources 任务的时候,先去执行 checkBigImage 任务了。

    2-2、在某个 Task 之后,执行自定义的Task:finizedBy

    1. afterEvaluate {
    2. // 1. 找到需要依赖自己 Task的构建流程的Task
    3. def mergeResourcesTask = tasks.findByName("mergeDebugResources")
    4. println "mergeResourcesTask=$mergeResourcesTask"
    5. // 2. 通过 finalizedBy 方法,插入到指定Task之后
    6. mergeResourcesTask.finalizedBy(checkBigImage)
    7. }
    8. 复制代码

    2-3、在两个 Task 之间,插入自定义的 Task :mustRunAfter 结合 dependsOn

    1. afterEvaluate {
    2. // 1. 找到需要挂接的Task
    3. def mergeResourcesTask = tasks.findByName("mergeDebugResources")
    4. def processDebugResourcesTask = tasks.findByName("processDebugResources")
    5. // 2.让自定义的 Task 在 mergeDebugResources 任务之后且在 processDebugResources 之前执行
    6. checkBigImage.mustRunAfter(mergeResourcesTask)
    7. processDebugResourcesTask.dependsOn(checkBigImage)
    8. }
    9. 复制代码

  • 相关阅读:
    【python深度学习】——torch.einsum|torch.bmm
    电阻值的优先值
    netty系列之:不用怀疑,netty中的ByteBuf就是比JAVA中的好用
    MySQL - UNION 与 UNION ALL
    测试日报怎么写 ?
    MySQL学习笔记27
    GBASE 8A v953报错集锦44--sftp 加载大文件报错和tmp 目录权限改变导致加载失败
    测试行业面临的问题及RunnerGo在工具层面如何解决的
    Flask--路由配置
    SpringBoot统一功能处理
  • 原文地址:https://blog.csdn.net/cpcpcp123/article/details/127836563