8.5 task 依赖详解中 dependsOn不起作用

来源:8-5 Task依赖详解及实战

杨宇

2018-06-18

代码如下:

task testDependsOn {
    dependsOn this.tasks.findAll { task ->
        return task.name.startsWith('lib')
    }
}
task lib1 {
    doLast {
        println 'lib1'
    }
}

不能正确的按照视频中的产生依赖,如果把两个task 的顺序进行调整则可以正确输出,使用的gradle 版本是 4.5.1

写回答

3回答

little_forest

2018-07-16

确实只能后面的task依赖前面的,但是如果是通过方法参数添加的就没有这个问题。

4
0

慕侠74744

2018-10-31

这是因为同一个文件=中前面的task优先配置,这时候还没有把lib1添加到TaskContainer中,可以通过添加监听配置的,代码如下


    
task testDependsOn {
   rootProject.afterEvaluate {
       dependsOn this.tasks.findAll { task ->
           return task.name.startsWith('lib')
       }
   }

   doLast{
       println "testDependsOn"
   }
}
task lib1 {
   doLast {
       println 'lib1'
   }
}



运行结果:

> Task :lib1 

lib1


> Task :testDependsOn 

testDependsOn




或者向楼上说的,将被依赖的task写在前面,这样读取配置的时候可以优先添加到TaskContainer

希望能帮到你

3
0

周康武

2018-11-21

楼主完美解决我的疑问,但是后还是有点问题,看下面代码,  不知是否是因为 "<<" 这符号不支持了 

```

The Task.leftShift(Closure) method has been deprecated and is scheduled to be

 removed in Gradle 5.0. Please use Task.doLast(Action) instead.

        at build_ehyhb7i9adkxf30qlrr9x4gwk.run(E:\CongBao\app\build.gradle:18

4)

        (Run with --stacktrace to get the full stack trace of this deprecatio

n warning.)

```

0
0

Gradle3.0自动化项目构建技术精讲+企业级案例实操

全面覆盖Gradle核心知识和高级用法,高级工程师必备技能!

877 学习 · 144 问题

查看课程