Ejecución condicional con onlyIf

Cómo usar onlyIf para hacer que una tarea sólo se ejecute si una determinada condición es verdadera. Además, un vistazo a la propiedad didWork.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Cuando trabajamos con tareas en Gradle, a menudo necesitamos controlar cuándo se ejecutan, asegurándonos de que solo lo hagan si se cumplen ciertas condiciones. Esto nos ayuda a evitar ejecuciones innecesarias o erróneas, como intentar distribuir un proyecto que aún no ha sido compilado. Para lograr esto, Gradle nos ofrece el método onlyIf, que nos permite definir condiciones bajo las cuales una tarea debe ejecutarse.

Para ilustrar esto, podemos crear dos tareas simples: una llamada compilar y otra llamada distribuir. En la tarea compilar, añadimos un bloque doLast que simplemente imprime compilando el proyecto. De manera similar, en la tarea distribuir, el bloque doLast imprime distribuyendo mi proyecto.

task compilar {
    doLast {
        println 'compilando el proyecto'
    }
}

task distribuir {
    doLast {
        println 'distribuyendo mi proyecto'
    }
}

Si ejecutamos la tarea distribuir directamente, veremos que imprime el mensaje de distribución, aunque no tenga sentido hacerlo sin haber compilado antes. Para evitar esto, normalmente usamos dependsOn para establecer que distribuir depende de compilar. Así, al ejecutar distribuir, Gradle se asegura de ejecutar primero compilar.

distribuir.dependsOn compilar

Sin embargo, existe otro enfoque que nos permite condicionar la ejecución de una tarea basándonos en una condición que puede evaluarse en tiempo de ejecución. Aquí es donde entra en juego onlyIf. Este método acepta un cierre (closure) que debe devolver un valor booleano. Si devuelve true, la tarea se ejecuta; si devuelve false, la tarea se omite.

Por ejemplo, podemos hacer que la tarea distribuir solo se ejecute si la tarea compilar realmente hizo algún trabajo. Para ello, usamos la propiedad didWork de la tarea compilar, que indica si la tarea se ejecutó y realizó alguna acción.

distribuir.onlyIf {
    compilar.didWork
}

Con esta configuración, si ejecutamos gradle -q distribuir sin haber ejecutado antes compilar, la tarea distribuir no hará nada porque compilar.didWork será false. En cambio, si ejecutamos primero gradle -q compilar distribuir, la tarea compilar se ejecutará, y luego distribuir también, ya que la condición en onlyIf será verdadera.

Pero onlyIf no se limita a verificar el estado de otras tareas. Podemos usar cualquier lógica que queramos, incluyendo código Java o Groovy, para decidir si una tarea debe ejecutarse. Por ejemplo, podemos condicionar la ejecución de distribuir a la existencia de un archivo específico, como configuración.xml.

distribuir.onlyIf {
    new File('configuración.xml').exists()
}

Con esta condición, si el archivo configuración.xml no existe, la tarea distribuir no se ejecutará. Si creamos el archivo (por ejemplo, usando touch configuración.xml en la terminal) y luego ejecutamos gradle -q distribuir, la tarea sí se ejecutará y mostrará el mensaje correspondiente.

Este mecanismo nos brinda una gran flexibilidad para controlar la ejecución de tareas en Gradle, permitiéndonos definir condiciones precisas y complejas que se adapten a las necesidades de nuestro proyecto. Podemos combinar dependsOn y onlyIf para gestionar dependencias y condiciones, asegurando que las tareas se ejecuten en el orden correcto y solo cuando sea necesario.

Lista de reproducción
  1. 1
    Instalar Gradle
    7 minutos
  2. 2
    Creando las primeras tareas
    7 minutos
  3. 3
    Más sobre tareas
    8 minutos
  4. 4
    Cómo usar Gradle con Java
    11 minutos
  5. 5
    Creando aplicaciones con Application
    3 minutos
  6. 6
    Dependencia entre tareas
    5 minutos
  7. 7
    Más métodos de las tareas
    9 minutos
  8. 8
    Ejecución condicional con onlyIf
    5 minutos
  9. 9
    finalizedBy
    2 minutos
  10. 10
    Tareas base de Gradle
    3 minutos
  11. 11
    Tarea Copy
    6 minutos
  12. 12
    Tarea Exec
    6 minutos
  13. 13
    Tarea Zip
    5 minutos
  14. 14
    Importar en IntelliJ IDEA
    6 minutos
  15. 15
    Importar en Eclipse
    5 minutos
  16. 16
    Importar en NetBeans
    4 minutos
  17. 17
    Dependencias con Maven
    11 minutos
  18. 18
    Qué aprender ahora
    5 minutos
  19. 19
    ¿Qué es Gradle?
    6 minutos