当 .execute() 命令失败时失败 Gradle 任务操作



".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),默认情况下,如果命令返回非零退出代码,它将引发异常。

最新更新