Jak mogę zatrzymać kompilację Gradle po wykryciu problemu? Mogę użyć potwierdzenia, zgłosić wyjątek, wykonać System.exit (zły pomysł) lub użyć dedykowanej funkcji w Gradle (ale nie mogłem jej znaleźć). Jaki jest najlepszy sposób dla Gradle (i dlaczego?).
162
require(something != whatever) { "No good!" }
w przeciwieństwie do bardziejif(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
jest to, że jako przyczyna wymaga drugiego parametru.make
była taka, żerules
(zadania) się powiodły lub zawiodły. Kiedyś próbowałemreturn false
- Gradle po prostu to zignorował i kontynuował bieg.Jeśli chcesz zatrzymać budowanie, rzuć:
lub wyrzuć podklasy dla powyższego wyjątku. Niektóre wyjątki podklasy w rzeczywistości kończą się niepowodzeniem tylko dla bieżącego zadania, ale kontynuują kompilację.
źródło
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ę.źródło
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.
Przekazuje Ci wiadomość taką jak:
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.
źródło
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.
Przykład:
źródło
Oto fragment kodu, który próbuje naśladować sposób, w jaki zadanie Gradle javac zgłasza błędy:
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.
źródło