Respuestas:
Por lo general, lanzo la excepción relevante del org.gradle.api
paquete , por ejemplo, InvalidUserDataException
cuando alguien ha ingresado algo no válido o GradleScriptException
por errores más generales.
Si desea detener la tarea o acción actual y pasar a la siguiente, también puede lanzar un StopActionException
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 que rules
(las tareas) tuvieron éxito o fracasaron. Una vez lo intenté return false
: Gradle simplemente lo ignoró y continuó corriendo.
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.
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.
task (tarball, dependsOn: warAdmin) << {
ant.fail('The sky is falling!!')
}
Te da un mensaje como:
* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!
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.
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.
GradleException('your message, why the script is stopped.')
Ejemplo:
if(null == System.getenv()['GRADLE_USER_HOME']) {
throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}
Aquí hay un fragmento de código que intenta emular cómo la tarea Gradle javac arroja errores:
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." )
)
}
}
}
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.