".execute()"操作期间应该如何检索输出和错误,如果出现错误,任务失败?是否会自动处理 project.copy {...} 和类似任务的错误?是否有任何等效的 project.sync {...} 或 project.exec {...} 可以使用?
class SomeTask extends DefaultTask {
@TaskAction
def translate() {
def execCommand = "<SOME_COMMAND>"
println 'Commandn' + execCommand
println execCommand.execute().text
}
}
运行任务时,它会喷出许多错误,然后将其标记为成功。相反,代码应该检测 execute() 命令何时失败并导致整个任务失败。
Translated 6 files: 301 errors, 0 warnings
:base:someTask (Thread[main,5,main]) completed. Took 3.387 secs.
BUILD SUCCESSFUL
我还使用以下方法将 STDOUT 记录到信息日志中以便于访问(因此您只需添加 -I 即可查看日志)。有没有推荐的替代方案?
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.with {
logging.captureStandardOutput LogLevel.INFO
...
project.exec {...}
可用于执行 shell 脚本。它的配置方式与 Exec 相同。 请注意,在将每个参数传递给 args
方法之前,需要将其拆分为单独的值。
class SomeTask extends DefaultTask {
def otherFlags = "-n -E"
@TaskAction
def translate() {
project.exec {
executable "echo"
args "-e"
args otherFlags.split()
}
}
}
而不是 Groovy 的 String#execute
,通常最好使用 Gradle 的 project.exec {}
(它的配置方式与Exec
任务完全相同,并允许重新路由标准 out/err),默认情况下,如果命令返回非零退出代码,它将引发异常。