Gradle,命令行';cmd''/c'';回声多拉斯特';无所事事

Gradle,命令行';cmd''/c'';回声多拉斯特';无所事事,gradle,Gradle,我正在阅读并创建以下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

我正在阅读并创建以下
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
中执行命令?

您的任务属于Exec类型。
commandLine
方法调用通过传递
cmd
/c
echo init stopTomcat来配置任务到它。这发生在配置阶段

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

init stopTomcat!
然后,
doLast
块启动并配置任务,传递
cmd
/c
echo doLast stopTomcat到它。此配置无效,因为taks已运行

要获得第二次打印,您可以执行以下操作:

task stopTomcat(type:Exec) {

    // on windows:
    commandLine 'cmd', '/c', 'echo init stopTomcat!'
    doLast {
        exec {
            commandLine 'cmd', '/c', 'echo doLast stopTomcat!'
        }
    }
}
这是调用exec任务的另一种方法