You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Gradle任务执行命令后的错误提示信息

解决Gradle Exec任务错误信息不明确的问题

要实现自定义错误提示并显示命令的具体错误输出,可以通过以下方式改造你的spectralTask任务:

核心思路

  • 捕获spectral lint命令的标准错误输出
  • 让Gradle暂时忽略命令的非零退出码,由我们自定义失败逻辑
  • 当命令执行失败时,抛出包含自定义信息和捕获到的错误内容的异常

改造后的代码实现

import org.gradle.api.tasks.Exec;
import org.gradle.api.provider.TaskProvider;
import org.gradle.api.GradleException;
import java.io.ByteArrayOutputStream;

// 注册任务并配置
TaskProvider<Exec> taskProvider = project.getTasks().register("spectralTask", Exec.class);
taskProvider.configure(exec -> {
    exec.executable("spectral");
    exec.args("lint");

    // 捕获命令的标准错误输出
    ByteArrayOutputStream errorOutput = new ByteArrayOutputStream();
    exec.setErrorOutput(errorOutput);

    // 让Gradle不直接因非零退出码终止任务,后续自行处理
    exec.setIgnoreExitValue(true);

    // 任务执行完成后检查退出状态
    exec.doLast(task -> {
        Exec execTask = (Exec) task;
        int exitCode = execTask.getExitValue();
        if (exitCode != 0) {
            // 拼接自定义错误信息与捕获到的具体错误
            String customErrorMessage = String.format(
                "Spectral代码检查失败!退出码:%d\n具体错误详情:\n%s",
                exitCode,
                errorOutput.toString()
            );
            // 抛出异常终止构建,展示自定义错误
            throw new GradleException(customErrorMessage);
        }
    });
});

代码说明

  • setErrorOutput(errorOutput):将命令执行产生的错误输出捕获到内存流中,用于后续读取展示
  • setIgnoreExitValue(true):阻止Gradle因命令返回非零值直接终止任务,给我们处理错误信息的机会
  • doLast代码块:在任务执行完毕后检查退出码,非零时抛出包含自定义提示和具体错误内容的GradleException,确保构建失败时展示清晰的错误信息

改造后,当spectral lint执行失败时,你会看到类似如下的错误提示:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:spectralTask'.
> Spectral代码检查失败!退出码:1
具体错误详情:
error: 规则'xxx'违反了规范...
...(命令返回的具体错误内容)

内容的提问来源于stack exchange,提问作者Bee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:00:07