问题:

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

解决方案:

可以使用-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是非常强大的。

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.3——排除任务的更多相关文章

  1. Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)

    如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...

  2. Android开发工具全面转向Android Studio(2)——AS project/module的CRUD

    本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...

  3. 配置cordova的android开发环境(无android studio)

    原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...

  4. 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  5. Eclipse搭建Android开发环境并运行Android项目

    Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...

  6. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档

    问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...

  7. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试

    问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...

  8. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App

    问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...

  9. Android开发:《Gradle Recipes for Android》阅读笔记1.2

    在android开发中会需要配置使用app的android SDK的最低版本和目标版本,这个是bulidl.gradle的android模块设置.默认有以下几个设置: applicationId,这个 ...

随机推荐

  1. 老项目转为maven的步骤具体说明

    可先阅读 关于已有项目转为maven的一点看法 新建maven项目要点 事实上之前已转过几个.但忘了记录下来.今天又转了一个项目,补记录一下. 步骤 1.写pom.xml 最耗费时间的一步.由于不用m ...

  2. log4j 配置(转)

    log4j是干什么的 log4j是Apache的一个开源项目,主要功能是打印日志信息,以各种形式在各种地方花式打印日志. 使用log4j的准备工作 使用log4j就必须要引入其jar包.附上官网地址h ...

  3. jBoss修改端口号

    http://blog.csdn.net/ghost_t/article/details/5708991 jBoss版本: jboss-5.1.0.GA jboss-6.0.0.Final     j ...

  4. JBoss jar包冲突及jar加载顺序

    http://blog.163.com/javaee_chen/blog/static/17919507720116149511489/将一个完整的.war包部署到Jboss容器中,启动后报如下错误: ...

  5. discuz 安装 文件不可写

    discuz安装过程中,系统会自动检查环境及文件目录权限,当出现目录不可写: 这个时候只需要用ftp修改文件夹权限就可以了

  6. Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用

    Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用 1 获取硬件核心基础核心基础Wmi1 2 其他资料2 3 Wmic WMI 命令行接口2 4 Atitit.获取主板 ...

  7. structs2 获得表单数据

    http://blog.csdn.net/crazy_java1234/article/details/52766307

  8. 使用thrift进行跨语言调用(php c# java)

    使用thrift进行跨语言调用(php c# java)   1:前言 实际上本文说的是跨进程的异构语言调用,举个简单的例子就是利用PHP写的代码去调C#或是java写的服务端.其实除了本文提供的办法 ...

  9. MySQL分组查询获取每个学生前n条分数记录(分组查询前n条记录)

    CREATE TABLE `t_test` ( `id` ) NOT NULL AUTO_INCREMENT, `stuid` ) NOT NULL, `score` ) DEFAULT NULL, ...

  10. 搭建hadoop集群,

    这个教程是2.4.1的 ,但是亲测对于2.6.5,是可以用的,对2.5.4应该也是支持的 1.准备Linux环境 1.0先将虚拟机的网络模式选为NAT 1.1修改主机名 vi /etc/sysconf ...