¿Cómo puedo detener una compilación de Gradle después de detectar un problema? Puedo usar una afirmación, lanzar una excepción, hacer un System.exit (mala idea) o usar una función dedicada en Gradle (pero no pude encontrar una). ¿Cuál es la mejor manera para Gradle (y por qué?).
162
require(something != whatever) { "No good!" }
diferencia de las más detalladas y tipo-eeif(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
es que requiere un segundo parámetro para una causa.make
es querules
(las tareas) tuvieron éxito o fracasaron. Una vez lo intentéreturn false
: Gradle simplemente lo ignoró y continuó corriendo.Si quieres detener la construcción, lanza:
o arroje las subclases para la excepción anterior. Algunas de las excepciones de subclase en realidad solo fallan en la tarea actual pero continúan con la compilación.
fuente
Actualmente no existe un método dedicado, aunque ha habido discusiones para agregar uno.
La forma recomendada de detener una compilación de Gradle es lanzar una excepción. Como Groovy no tiene excepciones marcadas, y Gradle por defecto no imprime el tipo de excepción, no es tan importante qué excepción se produce. En los scripts de compilación, GradleException se usa a menudo, pero una aserción Groovy también parece razonable (dependiendo de las circunstancias y la audiencia). Lo importante es proporcionar un mensaje claro. Agregar una causa (si está disponible) ayuda a depurar (
--stacktrace
).Gradle proporciona tipos de excepción dedicados
StopExecutionException
/StopActionException
para detener la tarea actual / acción de tarea pero continuar la compilación.fuente
Otra opción si no desea poder detectar la excepción más adelante es llamar a la tarea de falla de hormiga. En mi opinión, es un poco más fácil de leer y puede dar un buen mensaje al usuario sin usar --stacktrace.
Te da un mensaje como:
Probablemente puedas atrapar esto (¿tal vez arroja la BuildException de ant?) Pero si ese es un objetivo, entonces no usaría ant.fail. Simplemente facilitaría ver qué excepción atrapar lanzando una excepción estándar de gradle como sugirieron tim_yates.
fuente
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)Lanzar una GradleException simple funciona para detener el script de compilación. Esto funciona muy bien para verificar la configuración del entorno requerida.
Ejemplo:
fuente
Aquí hay un fragmento de código que intenta emular cómo la tarea Gradle javac arroja errores:
Cuando el comando regresa
0
no hay salida. Cualquier otro valor imprimirá la salida estándar y detendrá la compilación.NOTA: Si su comando también escribe en errorOutput, es posible que deba incluirlo en el registro de errores.
fuente