Gradle - 如何为Exec类型的任务设置依赖项任务?

时间:2016-11-16 01:01:58

标签: gradle

说,你有以下任务:

task commandA() {
  doLast {
    project.ext.ping = 'PING'
  }   
}

这将有效:

task commandB() {
    dependsOn commandA
    doLast {
        println ping
    }   
}

这将失败:

task commandC(type: Exec) {
    dependsOn commandA
    commandLine "echo", ping
}

出现Could not find property 'ping' on task 'commandC'.错误消息。

那么,如何为exec类型的任务声明依赖关系并在该依赖关系中设置一些变量呢?

1 个答案:

答案 0 :(得分:0)

只是不要在doLast块中初始化变量,因为它在执行阶段被初始化,但是commandLine "echo", ping正试图在构建的配置阶段获取它。

所以,你需要这样的东西:

task commandA() {
    project.ext.ping = 'PING'     
}

甚至没有任务,如下:

project.ext.ping = 'PING' 

因为总是执行任何任务的配置,即使任务的操作不会被执行。

另一个解决方案是使用exec-action,而不是exec-task,如下所示:

task commandA() {
    doLast {
        project.ext.ping = 'PING'
    }
}

task commandC {
    dependsOn commandA
    doLast {
        exec {
            commandLine ping, "192.168.100.1"
        }
    }
}

在这种情况下,exec-closure将在执行阶段完成,因为ping变量已经可用。

您可以在官方Gradle user guide

中了解构建生命周期