如何修改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
相关产品推荐
相关产品推荐

