Objetivo del tema
Comprenderás cómo Gradle modela el trabajo mediante tareas, cómo se ejecutan desde la línea de comandos y qué mecanismos ofrece para automatizar builds eficientes.
Al finalizar, podrás crear tareas personalizadas, reconocer el ciclo de vida de un build y aprovechar el soporte incremental y la caché para reducir tiempos de ejecución.
Una tarea representa una unidad de trabajo. Gradle incluye tareas predefinidas como build, clean o test, y permite ejecutar cualquier tarea desde la terminal con gradle tarea o gradlew tarea.
gradle tasks para listar las tareas disponibles en el proyecto.gradle clean build ejecuta ambas respetando sus dependencias.--info o --scan proporcionan diagnósticos detallados al ejecutar un build.tasks.register("generarInforme") {
group = "reportes"
description = "Genera un informe con la fecha y versión del proyecto"
doLast {
println("Informe generado el ${new Date()} para la versión ${project.version}")
}
}
// Ejecutar desde la terminal:
// gradle generarInforme
Registra tareas con tasks.register para aprovechar la configuración diferida, lo que evita costos innecesarios mientras no se ejecutan.
Gradle provee tareas predeterminadas a través de sus plugins. Por ejemplo, el plugin java aporta compileJava, processResources o jar. Las tareas personalizadas permiten extender la automatización con lógica a medida.
doFirst/doLast para ejecutar código Groovy o Kotlin.DefaultTask o reutilizar tipos existentes como Copy para manipular archivos.abstract class GenerarVersionTask extends DefaultTask {
@TaskAction
void imprimir() {
println("Versión actual: ${project.version}")
}
}
tasks.register("mostrarVersion", GenerarVersionTask)
tasks.named("build") {
dependsOn("mostrarVersion")
}
Asociar tareas personalizadas a tareas predeterminadas amplía el pipeline sin duplicar lógica.
El proceso de build se divide en tres fases: inicialización, configuración y ejecución. En la primera, Gradle identifica los proyectos; en la segunda, configura tareas y dependencias; en la tercera, resuelve y ejecuta solo las tareas solicitadas.
Consulta la guía oficial de Gradle sobre ciclo de vida del build para profundizar en cada fase y en cómo influyen los gradle scripts.
Gradle detecta cambios para evitar tareas redundantes. Un build incremental compara entradas y salidas de cada tarea, marcándolas como up-to-date cuando nada cambió. Además, la caché de build reutiliza resultados entre ejecuciones locales o remotas.
@Input, @OutputFile y anotaciones similares para habilitar la optimización incremental.gradle.properties con org.gradle.caching=true.gradle build --build-cache aprovecha la caché incluso si no está habilitada por defecto.tasks.register("procesarDatos") {
inputs.file("data/origen.csv")
outputs.file("build/cache/destino.csv")
doLast {
println("Procesando datos...")
// Lógica de transformación
}
}
// Activar caché en gradle.properties:
// org.gradle.caching=true
La documentación de Gradle Build Cache explica cómo compartir resultados entre equipos y cómo medir el beneficio con build scans.
Dominar las tareas en Gradle implica conocer cómo se definen, cómo interactúan con el ciclo de vida y cómo aprovechar la ejecución incremental y la caché. Estas prácticas permiten builds más rápidos, repetibles y fáciles de mantener.