gpt4 book ai didi

gradle - 仅针对 Gradle 中的意外异常显示堆栈跟踪

转载 作者:行者123 更新时间:2023-12-02 03:12:26 26 4
gpt4 key购买 nike

在我的构建文件中,我总是设置默认显示堆栈跟踪的选项

gradle.startParameter.showStacktrace = org.gradle.api.logging.configuration.ShowStacktrace.ALWAYS 

这在发生意外故障时非常有用。但是,有一些典型的失败类型和原因(例如编译失败或代码质量违规),在这种情况下我不想要堆栈跟踪 - 在控制台上只需要有意义的输出就足够了。

有没有办法禁止为某些特定的异常或任务白名单显示堆栈跟踪?

最佳答案

这是一种方法,尽管它有点复杂。这个想法基于 Custom Logger 的概念.

假设我们有一个带有 2 个额外任务的 Java 项目:

apply plugin: 'java'

task foo() << {
throw new IllegalStateException("from foo")
}

task bar() << {
throw new GradleException("from bar")
}

进一步假设我们想要抑制 IllegalStateExceptionCompilationFailedException(但不是 GradleException)的堆栈跟踪(或打印压缩版本)。为此,请考虑以下 init.gradle 文件:

useLogger(new CustomEventLogger())

class CustomEventLogger extends BuildAdapter implements TaskExecutionListener {

def exceptionWhitelist = ["IllegalStateException", "CompilationFailedException"]

public void beforeExecute(Task task) {
println "[$task.name]"
}

public void afterExecute(Task task, TaskState state) {
println()
}
private def getCauses(def throwable) {
def causes = []

def t = throwable

while (t != null) {
causes << t.class.simpleName
t = t.cause
}

causes
}
public void buildFinished(BuildResult result) {
println 'build completed'
def throwable = result.failure
if (throwable != null) {
println "TRACER failed with: " + throwable.class
def causes = getCauses(throwable)
if (!hasCauseInWhitelist(causes)) {
throwable.printStackTrace()
} else {
causes.each { println it }
}
}
}
}

init.gradle 必须在命令行中指定。例如gradle -I init.gradle compileJava

它将打印指定的两个异常的压缩信息。 (请注意,遍历原因的层次结构以找到匹配项。)

缺点是这“完全禁用 Gradle 的默认输出”,因此可能需要进一步调整,具体取决于要求。

例如,如果我故意在 Java 中放置一个语法错误:

bash$ gradle -I init.gradle compileJava
[compileJava]
~/src/main/java/net/codetojoy/Employee.java:4: error: class, interface, or enum expected
public clazz Employee {
^
1 error

build completed
TRACER failed with: class org.gradle.internal.exceptions.LocationAwareException
LocationAwareException
TaskExecutionException
CompilationFailedException

然后我们观察堆栈跟踪的压缩信息。

关于gradle - 仅针对 Gradle 中的意外异常显示堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39174651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com