Gradle,commandLine'cmd','/ c','echo doLast!'什么也没做

时间:2017-02-05 18:24:14

标签: gradle

我正在阅读Gradle Exec并创建了以下build.gradle

task startTomcat(type:Exec) {
    commandLine 'cmd', '/c', 'echo init startTomcat'
} 

task stopTomcat(type:Exec) {

    // on windows:
    commandLine 'cmd', '/c', 'echo init stopTomcat!'
    doLast {
        commandLine 'cmd', '/c', 'echo doLast stopTomcat!'
    }
}

当我运行gradlew stopTomcat时,输出如下所示:

Parallel execution with configuration on demand is an incubating feature.
:stopTomcat
init stopTomcat!

我看不到行doLast stopTomcat!为什么我不能在doLast中执行命令?

1 个答案:

答案 0 :(得分:1)

您的任务是Exec类型。 commandLine方法调用通过将cmd/cecho init stopTomcat!传递给它来配置任务。这发生在配置阶段。

然后任务在执行阶段运行并打印:

init stopTomcat!

然后doLast块启动并配置任务,将cmd/cecho doLast stopTomcat!传递给它。此配置无效,因为已经运行了。

要获得第二次打印,您可以这样做:

task stopTomcat(type:Exec) {

    // on windows:
    commandLine 'cmd', '/c', 'echo init stopTomcat!'
    doLast {
        exec {
            commandLine 'cmd', '/c', 'echo doLast stopTomcat!'
        }
    }
}

这是如何调用exec任务的另一种方法。