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

Gradle-如何为Exec类型的任务设置依赖项任务?,gradle,Gradle,比如说,您有以下任务: task commandA() { doLast { project.ext.ping = 'PING' } } 这将有助于: task commandB() { dependsOn commandA doLast { println ping } } 这将失败: task commandC(type: Exec) { dependsOn commandA commandLine "e

比如说,您有以下任务:

task commandA() {
  doLast {
    project.ext.ping = 'PING'
  }   
}
这将有助于:

task commandB() {
    dependsOn commandA
    doLast {
        println ping
    }   
}
这将失败:

task commandC(type: Exec) {
    dependsOn commandA
    commandLine "echo", ping
}
With
在任务“commandC”上找不到属性“ping”。
错误消息


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

不要在
doLast
块中初始化变量,因为它在执行阶段得到初始化,但是
命令行“echo”,ping
正试图在构建的配置阶段得到它

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

task commandA() {
    project.ext.ping = 'PING'     
}
甚至没有任务,如下所示:

project.ext.ping = 'PING' 
因为任何任务的配置都是始终执行的,即使任务的操作不会执行

另一种解决方案是使用exec操作,而不是exec任务,如下所示:

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

task commandC {
    dependsOn commandA
    doLast {
        exec {
            commandLine ping, "192.168.100.1"
        }
    }
}
在这种情况下,exec闭包将在执行阶段完成,此时ping变量已经可用


您可以在官方的Gradle中阅读有关构建生命周期的内容

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

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

task commandA() {
    project.ext.ping = 'PING'     
}
甚至没有任务,如下所示:

project.ext.ping = 'PING' 
因为任何任务的配置都是始终执行的,即使任务的操作不会执行

另一种解决方案是使用exec操作,而不是exec任务,如下所示:

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

task commandC {
    dependsOn commandA
    doLast {
        exec {
            commandLine ping, "192.168.100.1"
        }
    }
}
在这种情况下,exec闭包将在执行阶段完成,此时ping变量已经可用

您可以在官方的Gradle中阅读构建生命周期