Odpowiedzi:
Zwykle wyrzucam odpowiedni wyjątek z org.gradle.api
pakietu , na przykład InvalidUserDataException
gdy ktoś wprowadził coś nieprawidłowego lub GradleScriptException
dla bardziej ogólnych błędów.
Jeśli chcesz zatrzymać bieżące zadanie lub akcję i przejść do następnego, możesz również rzucić StopActionException
require(something != whatever) { "No good!" }
w przeciwieństwie do bardziej if(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
jest to, że jako przyczyna wymaga drugiego parametru.
make
była taka, że rules
(zadania) się powiodły lub zawiodły. Kiedyś próbowałem return false
- Gradle po prostu to zignorował i kontynuował bieg.
Obecnie nie ma dedykowanej metody, chociaż trwały dyskusje, aby ją dodać.
Zalecanym sposobem zatrzymania kompilacji Gradle jest zgłoszenie wyjątku. Ponieważ Groovy nie ma sprawdzonych wyjątków, a Gradle domyślnie nie drukuje typu wyjątku, nie jest tak krytyczne, który wyjątek jest zgłaszany. W skryptach kompilacji często używany jest GradleException, ale asercja Groovy również wydaje się rozsądna (w zależności od okoliczności i odbiorców). Ważne jest, aby przekazać jasny komunikat. Dodanie przyczyny (jeśli jest dostępna) pomaga w debugowaniu ( --stacktrace
).
Gradle zapewnia dedykowane typy wyjątków StopExecutionException
/ StopActionException
do zatrzymywania bieżącego zadania / akcji zadania, ale kontynuuje kompilację.
Inną opcją, jeśli nie chcesz później wychwycić wyjątku, jest wywołanie zadania niepowodzenia mrówki. Moim zdaniem jest nieco łatwiejszy do odczytania i można przekazać użytkownikowi przyjemną wiadomość bez użycia opcji --stacktrace.
task (tarball, dependsOn: warAdmin) << {
ant.fail('The sky is falling!!')
}
Przekazuje Ci wiadomość taką jak:
* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!
Prawdopodobnie możesz to złapać (być może rzuca on wyjątek BuildException ant?), Ale jeśli to jest cel, nie użyłbym ant.fail. Ułatwiłbym tylko wyłapanie wyjątku, rzucając standardowy wyjątek gradle, zgodnie z sugestią tim_yates.
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)
Zgłoszenie prostego GradleException działa w przypadku zatrzymania skryptu kompilacji. Działa to świetnie do sprawdzania wymaganej konfiguracji środowiska.
GradleException('your message, why the script is stopped.')
Przykład:
if(null == System.getenv()['GRADLE_USER_HOME']) {
throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}
Oto fragment kodu, który próbuje naśladować sposób, w jaki zadanie Gradle javac zgłasza błędy:
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." )
)
}
}
}
Gdy polecenie powróci, 0
nie ma wyjścia. Każda inna wartość spowoduje wydrukowanie standardOutput i zatrzymanie kompilacji.
UWAGA: Jeśli polecenie zapisuje również w errorOutput, może być konieczne uwzględnienie tego w dzienniku błędów.