博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle之恋-任务2
阅读量:6671 次
发布时间:2019-06-25

本文共 2681 字,大约阅读时间需要 8 分钟。

由于任务作为Gradle的核心功能模块,多花点精力是值得的,本文继上一篇主要涉及到:任务的执行顺序、为任务添加组和描述、跳过任务、扩展任务属性、定义默认任务。

gradle

任务顺序

如果构建(build)不能在清理(clean)之前执行,因为这样无意义;构建之前必须先验证;做集成测试前先做单元测试等就必须指定其任务的执行顺序。

任务依赖的顺序

指定顺序不同于任务间的依赖顺序:依赖是影响那些任务执行,而顺序是影响这些要执行的任务之间的顺序。

task hello{    doLast{        print 'hello'    }}task aline{    doLast{        print ' - '     }   }task world(dependsOn:[hello,aline]){    doLast{        println 'world!'    }   }

当执行world任务时,执行的顺序是aline,hello,world,输出

- helloworld!

可见当任务有多个依赖时,会先执行被依赖的任务,而被依赖的任务执行顺序是依据任务名的字典顺序。你可以自定义顺序如

aline.mustRunAfter hello

则aline任务必须在hello之后执行,输出

hello - world!

指定顺序

指定顺序是通过两个关键词来设定的:mustRunAfter和shouldRunAfter,前者是严格指定的,而后者比较宽松,在两种情况下不按照指定的顺序执行:

  • 如果使用它产生循环顺序时,如指定了taskA在taskB之后,而又指定了taskB在taskA之后。

  • 这种情况官方文档貌似没说清楚?!!!后续再研究下源码看看。

    task taskX {    doLast {        println 'taskX'    }}task taskY {    doLast {        println 'taskY'    }}task taskZ {    doLast {        println 'taskZ'    }}taskX.dependsOn taskYtaskY.dependsOn taskZtaskZ.shouldRunAfter taskX

    执行

$ gradle -q taskX

taskZ
taskY
taskX

添加描述与组

可以通过关键词description和grou为任务添加描述和组,然后可以使用gradle tasks来查看,如果改任务没有组,则需要额外参数--all来查看。

task description{    group 'mine'    description 'this is just a description.'}

查看

Mine tasks

----------
description - this is just a description.

替换任务

有时根据需要,你可能想替换一个任务,这个很简单:更加任务名进行重写:

task overwriteTask{    doLast{        println 'this is a str task';    }}task overwriteTask(overwrite:true){    doLast{        println 'this is a new overwrite str task.'    }}

执行

$ gradle -q oT

this is a new overwrite str task.

跳过任务

Gradle提供多种跳过任务的方法,不仅有命令行形式的,还有代码级别的。

命令行

当你想跳过依赖的任务时,可以使用-x形式跳过,如执行build跳过单元测试时:

$ gradle build -x test
断言

你可以使用onlyIf()来做单元,当其返回值为true时被执行,否则跳过.

task hello{    doLast{        println 'hello world!'    }}hello.onlyIf{!project.hasProperty('skipHello')}

当执行gradle hello -PskipHello 时,任务hello并不会执行。命令行参数-P为命令行设置property。

StopExecutionException

当任务抛出StopExecutionException将跳过任务继续执行下一个任务。

task hello{    doLast{        print 'hello '    }   }hello.doFirst{    throw new StopExecutionException()      }task world(dependsOn:hello){    doLast{        println 'world!'    }}

执行任务world即可看到效果。

enabled属性

每个任务都有一个enabled属性,设置为false将跳过。

task hello{    doLast{        print 'hello '    }   }hello.enabled = falsetask world(dependsOn:hello){    doLast{        println 'world!'    }}

扩展属性

你可以通过ext来扩展任务的属性

task hello{    ext.str="hello world!"}task say(){    doLast{        println hello.str    }}

默认任务

Gradle允许你使用关键词defaultTasks定义一个或多个任务作为默认任务,当没有任务指定时则执行默认任务。

defaultTasks 'hello','intro'task hello{    doLast{        println 'hello,welcome to you!'    }}task intro(){    doLast{        println 'my name is zhai'    }}

可以执行gradle -q来验证。

未完待续....


更多原创文章可关注我的个人博客: 或微信公众账号:zhaiqianfeng

微信公众号:zhaiqianfeng

转载地址:http://exlxo.baihongyu.com/

你可能感兴趣的文章
一张图让自己搞懂(mēng)原型&原型链
查看>>
Mybatis N+1问题解析
查看>>
前端每日实战:75# 视频演示如何用纯 CSS 创作一支摇曳着烛光的蜡烛
查看>>
我为什么要升级到Ionic3
查看>>
Elixir: 函数装饰器
查看>>
Java并发编程之volatile关键字解析
查看>>
309. Best Time to Buy and Sell Stock with Cooldown
查看>>
Git 2.7: 一个新的带来许多新特性和性能提升的主要版本
查看>>
jDays 2016综合报道
查看>>
大规模学习该如何权衡得失?解读NeurIPS 2018时间检验奖获奖论文
查看>>
解读2015之Spark篇:新生态系统的形成
查看>>
Node和JS基金会宣布合并为 OpenJS 基金会
查看>>
编转码、CDN和AI是如何撑起短视频数百亿市场规模的
查看>>
取代Python多进程!伯克利开源分布式框架Ray
查看>>
如何对DevOps数据库进行源代码控制
查看>>
虚拟主播上线:多模态将改变人机交互的未来
查看>>
Hyperledger Grid:一个用于分布式供应链解决方案的框架
查看>>
.NET或将引入类型类和扩展
查看>>
菜鸟入门【ASP.NET Core】9:RoutingMiddleware介绍以及MVC引入
查看>>
Windows 使用 ln -s 创建软链接
查看>>