展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

任务执行顺序、开启关闭、超时、查找、任务规则、断言、默认任务

  • 任务执行顺序
1、dependsOn 强依赖方式
2、通过 Task 输入输出
3、通过 API 指定执行顺序
  • 动态执行任务
  • 在循环中注册同一类型的多个任务
# 注册4个同一类型的任务
4.times { counter ->
tasks.register("task$counter") {
doLast {
println "I'm task number $counter"
}
}
}
  • 在运行时动态地向任务添加依赖项
# 注册4个同一类型的任务,且使任务0依赖任务2和任务3,那么代表任务 2 和 3 需要在任务 0 之前优先加载
4.times { counter ->
tasks.register("task$counter") {
doLast {
println "I'm task number $counter"
}
}
}
tasks.named('task0') { dependsOn('task2', 'task3') }
  • 测试

  • 任务的开启与关闭

# 每个任务都有一个 enabled 默认为的标志 true。将其设置为 false 阻止执行任何任务动作。禁用的任务将标记为“跳过”
task disableMe {
doLast {
println 'This task is Executing...'
}
enabled(true) //直接设置任务开启,默认值为true
}
//disableMe.enabled = false //设置关闭任务
  • 任务超时
每个任务都有一个 timeout 可用于限制其执行时间的属性。当任务达到超时时,其任务执行线程将被中断。该任务将被标记为失败。
终结器任务仍将运行。如果 --continue 使用,其他任务可以在此之后继续运行。不响应中断的任务无法超时。
Gradle 的所有内置任务均会及时响应超时
# 案例
task a() {
doLast {
Thread.sleep(1000)
println "当前任务a执行了"
}
timeout = Duration.ofMillis(500)
}
task b() {
doLast {
println "当前任务b执行了"
}
}
# 在控制台使用: gradle a b 测试会发现执行 a 的时候,由于 a 执行超时,抛出异常,所以没有继续往下执行【b 也没执行】。
# 然后在控制台使用: gradle a b –continue,测试会发现 a 虽然执行失败,但是 b 还是执行
  • 任务查找
task atguigu {
doLast {
println "让天下没有难学的技术:尚硅谷"
}
}
//根据任务名查找
tasks.findByName("atguigu").doFirst({println "尚硅谷校区1:北京...."})
tasks.getByName("atguigu").doFirst({println "尚硅谷校区2:深圳...."})
//根据任务路径查找【相对路径】
tasks.findByPath(":atguigu").doFirst({println "尚硅谷校区3:上海...."})
tasks.getByPath(":atguigu").doFirst({println "尚硅谷校区4:武汉...."})
# 执行 task:
gradle atguigu
# 输出
尚硅谷校区4:武汉....
尚硅谷校区3:上海....
尚硅谷校区2:深圳....
尚硅谷校区1:北京....
让天下没有难学的技术:尚硅谷
  • 任务规则
# 当我们执行、依赖一个不存在的任务时,Gradle 会执行失败,报错误信息。那我们能否对其进行改进,当执行一个不存在的任务时,不是报错而是打印提示信息
task hello {
doLast {
println 'hello 尚硅谷的粉丝们'
}
}
tasks.addRule("对该规则的一个描述,便于调试、查看等"){
String taskName -> task(taskName) {
doLast {
println "该${taskName}任务不存在,请查证后再执行"
}
}
}
# 测试:
gradle abc hello
# 此时当 abc 任务不存在时,也不会报异常【不中断执行】而是提示自定义的规则信息,继续执行 hello 任务。此外,它还可以根据不同的规则动态创建需要的任务等情况
  • 断言
# 断言就是一个条件表达式。Task 有一个 onlyIf 方法。它接受一个闭包作为参数,如果该闭包返回 true 则该任务执行,否则跳过。
这有很多用途,比如控制程序哪些情况下打什么包,什么时候执行单元测试,什么情况下执行单元测试的时候不执行网络测试等
task hello {
doLast {
println 'hello 尚硅谷的粉丝们'
}
}
hello.onlyIf { !project.hasProperty('fensi') }
测试:通过-P 为 Project 添加 fensi
gradle hello -Pfensi
  • 默认任务
# Gradle 允许定义一个或多个在没有指定其他任务时执行的默认任务
defaultTasks 'myClean', 'myRun'
tasks.register('myClean'){
doLast {
println 'Default Cleaning!'
}
}
tasks.register('myRun') {
doLast {
println 'Default Running!'
}
}
tasks.register('other') {
doLast {
println "I'm not a default task!"
}
}
# 测试
gradle -q
# 执行结果
Default Cleaning!
Default Runnin
posted @   DogLeftover  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示