仅显示Gradle中意外异常的堆栈跟踪

仅显示Gradle中意外异常的堆栈跟踪,gradle,groovy,Gradle,Groovy,在我的构建文件中,默认情况下,我总是将选项设置为显示堆栈跟踪 gradle.startParameter.showStacktrace = org.gradle.api.logging.configuration.ShowStacktrace.ALWAYS 这在发生意外故障时非常有用。然而,有一些类型的失败和原因是典型的(比如编译失败或代码质量冲突),在这种情况下,我不想要stacktrace——只要控制台上有意义的输出就足够了 是否有一种方法可以禁用某些特定的异常或任务白名单的stackt

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

gradle.startParameter.showStacktrace = org.gradle.api.logging.configuration.ShowStacktrace.ALWAYS 
这在发生意外故障时非常有用。然而,有一些类型的失败和原因是典型的(比如编译失败或代码质量冲突),在这种情况下,我不想要stacktrace——只要控制台上有意义的输出就足够了


是否有一种方法可以禁用某些特定的异常或任务白名单的stacktrace显示?

这里有一种方法,尽管有些涉及。这个想法是基于一个概念

假设我们有一个Java项目,它有两个额外的任务:

apply plugin: 'java'

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

task bar() << {
    throw new GradleException("from bar") 
}
必须在命令行上指定
init.gradle
。e、 g.
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
然后我们观察stacktrace的压缩信息

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