답변:
나는 보통에서 관련 예외를 발생 org.gradle.api
패키지 예를 들어, InvalidUserDataException
누군가가 입력 한 뭔가 잘못에 대한, 또는 GradleScriptException
일반적인 오류.
현재 작업 또는 작업을 중지하고 다음 작업으로 넘어가려면 StopActionException
require(something != whatever) { "No good!" }
. 더 장황하고 type-ee가 if(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
원인에 대한 두 번째 매개 변수가 필요하다는 것입니다.
make
즉 rules
성공 또는 실패 (태스크들). 나는 한 번 시도했다 return false
-Gradle은 그것을 무시하고 계속 실행했다.
추가 할 토론이 있었지만 현재는 전용 방법이 없습니다.
Gradle 빌드를 중지하는 권장 방법은 예외를 발생시키는 것입니다. Groovy는 예외를 검사하지 않았고 Gradle은 기본적으로 예외 유형을 인쇄하지 않으므로 어떤 예외가 throw되는지는 중요하지 않습니다. 빌드 스크립트에서는 GradleException이 자주 사용되지만 상황과 대상에 따라 Groovy 어설 션도 합리적으로 보입니다. 중요한 것은 명확한 메시지를 제공하는 것입니다. 원인을 추가하면 (사용 가능한 경우) 디버깅에 도움이됩니다 ( --stacktrace
).
Gradle을 전용 예외 유형을 제공합니다 StopExecutionException
/ StopActionException
현재 작업 / 작업 동작을 중지하지만, 빌드를 계속하십시오.
나중에 예외를 포착하지 않으려는 경우 또 다른 옵션은 개미 실패 작업을 호출하는 것입니다. 내 의견으로는 약간 더 읽기 쉽고 --stacktrace를 사용하지 않고도 사용자에게 좋은 메시지를 줄 수 있습니다.
task (tarball, dependsOn: warAdmin) << {
ant.fail('The sky is falling!!')
}
다음과 같은 메시지를 제공합니다.
* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!
아마 당신 은 이것을 잡을 수 있습니다 (아마도 Ant의 BuildException을 던지나요?)하지만 그것이 목표라면 ant.fail을 사용하지 않을 것입니다. tim_yates가 제안한대로 표준 gradle 예외를 던져서 포착 할 예외를 쉽게 볼 수있게 만들었습니다.
throw new GradleException("The sky is falling!!")
(Gradle을 3.4.1)
다음은 Gradle javac 태스크가 오류를 발생시키는 방법을 모방하려는 코드 조각입니다.
task myCommand(type:Exec) {
... normal task setup ....
ignoreExitValue true
standardOutput = new ByteArrayOutputStream()
ext.output = { standardOutput.toString() }
doLast {
if (execResult.exitValue) {
logger.error(output())
throw new TaskExecutionException( it,
new Exception( "Command '${commandLine.join(' ')}' failed; "
+ "see task output for details." )
)
}
}
}
명령이 리턴되면 0
출력이 없습니다. 다른 값은 standardOutput을 인쇄하고 빌드를 중단합니다.
참고 : 명령이 errorOutput에도 쓰면 오류 로그에 포함시켜야합니다.