我正在阅读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
中执行命令?
答案 0 :(得分:1)
您的任务是Exec类型。 commandLine
方法调用通过将cmd
,/c
和echo init stopTomcat!
传递给它来配置任务。这发生在配置阶段。
然后任务在执行阶段运行并打印:
init stopTomcat!
然后doLast
块启动并配置任务,将cmd
,/c
和echo doLast stopTomcat!
传递给它。此配置无效,因为已经运行了。
要获得第二次打印,您可以这样做:
task stopTomcat(type:Exec) {
// on windows:
commandLine 'cmd', '/c', 'echo init stopTomcat!'
doLast {
exec {
commandLine 'cmd', '/c', 'echo doLast stopTomcat!'
}
}
}
这是如何调用exec任务的另一种方法。