• Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.3——排除任务


    问题:

    你想要在构建进程当中排除指定的任务。

    解决方案:

    可以使用-x排除单个任务。编辑task graph排除多个任务。

    讨论:

    Gradle的构建进程包含了许多任务的执行顺序。他们中的大多数都依赖于进程中之前执行的任务,但是也有些在时间紧张的时候也可以被排除。

    举个例子,lint任务对判断你的项目和google推荐的APP实践有多少差距,但是没必要每次都执行。

    在Gradle中使用-x标志(--exclude-task的缩写)排除一个任务。因此使用这个flag跳过lint任务(或者其它你不想要的任务),如下:

    ./gradlew build -x lint

    这个排除了lint任务和所有依赖它的任务。任何需要它的任务也不会运行,所以确定拟派出的任务不会在后面的进程当中被需要。

    唯一的问题是如果你的项目包含多个variants,每个任务都有一个lint任务。理论上你可以手动的排除,但是你更希望在build里面排除。

    当Gradle运行的时候,集合了一个有向非循环图(DAG),task的图表。你可以通过gradle对象在build文件里面得到参考。任何对graph的修改都必须在它形成之后,所以你需要在应用任何改变之前使用whenReady属性。

    结果就是如可以像下面这样在build文件里面写代码:

    gradle.taskGraph.whenReady { graph ->
        graph.allTasks.findAll { it.name ==~ /lint.*/ }*.enabled = false
    }

    task graph的allTasks属性使用Groovy风格引用getAllTasks方法。这个返回tasks的java.util.List。Groovy在List里面增加了一个findAll方法,可以只返回满足提供的闭包的任务。在这种情况下,闭包表示遍历所有任务的name属性,并且坚持他们是否符合正则表达式。使用“spread-dot”操作符将列表中的所有任务无效。

    结果就是所有以小写letters开头的任务,它们的enabled属性都置false,所有它们都不会执行。

    有时候你不想排除所有lint任务,你可以在这么做之前检查项目属性是否被设置:

    gradle.taskGraph.whenReady { graph -> 
      if (project.hasProperty('noLint')) {
          graph.allTasks.findAll { it.name ==~ /lint.*/ }*.enabled = false
      }
    }

    你可以在命令行使用-P设置project属性,如下:

    这个涉及到大量的Groovy只是,但是在修改task graph是非常强大的。

  • 相关阅读:
    TSQL语句 创建表
    数据库设计
    WampServer
    表单验证之相等验证
    表单验证之非空验证
    遗忘的知识点
    JavaScript函数
    JS之数组
    JS的分支与循环语句
    JavaScript基础语法要点总结
  • 原文地址:https://www.cnblogs.com/tootwo2/p/6422117.html
Copyright © 2020-2023  润新知