[groovy] Gradle 빌드를 중지하는 권장 방법

문제를 감지 한 후 Gradle 빌드를 중지하려면 어떻게해야합니까? assert를 사용하거나 예외를 발생 시키거나 System.exit (나쁜 생각)를 수행하거나 Gradle에서 전용 함수를 사용할 수 있습니다 (그러나 찾을 수는 없습니다). Gradle에 가장 좋은 방법은 무엇입니까?



답변

나는 보통에서 관련 예외를 발생 org.gradle.api패키지 예를 들어, InvalidUserDataException누군가가 입력 한 뭔가 잘못에 대한, 또는 GradleScriptException일반적인 오류.

현재 작업 또는 작업을 중지하고 다음 작업으로 넘어가려면 StopActionException


답변

빌드를 중지하려면 다음을 수행하십시오.

throw new GradleException('error occurred')

위의 예외에 대한 서브 클래스를 던지십시오. 일부 서브 클래스 예외는 실제로 현재 작업 만 실패하지만 빌드를 계속합니다.


답변

추가 할 토론이 있었지만 현재는 전용 방법이 없습니다.

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 예외를 던져서 포착 할 예외를 쉽게 볼 수있게 만들었습니다.


답변

간단한 GradleException을 던지면 빌드 스크립트가 중지됩니다. 이것은 필요한 환경 설정을 확인하는 데 효과적입니다.

GradleException('your message, why the script is stopped.')

예:

if(null == System.getenv()['GRADLE_USER_HOME']) {
    throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}


답변

다음은 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에도 쓰면 오류 로그에 포함시켜야합니다.


답변