【发布时间】:2016-04-15 08:00:32
【问题描述】:
这是 Windows 上的构建过程。 我有 gradle 任务(类型:Exec),它使用其 doFirst 闭包临时从外部目录复制文件,这是其构建过程所必需的:
task(myTask, type: Exec) {
[...]
< do own stuff >
[...]
doFirst {
println "Copy file"
if (System.properties['os.name'].toLowerCase().contains('windows')) {
commandLine 'cmd', '/c', "copy .\\<myFile> .\\..\\.."
}
}
}
由于某种原因,使用 doFirst 中的 commandLine 来执行复制命令,会使整个任务终止并阻止执行任务的主要目的。
使用开关--debug 我查看了调试输出,发现复制命令使状态变为成功:
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command 'cmd'.
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
[DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
[INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'cmd''
[QUIET] [system.out] 1 file(s) copied.
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: SUCCEEDED
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command 'cmd'' finished with exit value 0 (state: SUCCEEDED)
[DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task 'myTask'
如何防止 doFirst 中的“命令行”阻止任务进一步执行?
【问题讨论】:
-
你为什么决定使用 windows 命令行文件复制而不是 gradle 复制任务?