4 - El archivo build.gradle

Objetivo del tema

Comprenderás cómo el archivo principal de Gradle describe el proceso de construcción mediante bloques declarativos y cómo adaptar su sintaxis tanto en Groovy como en Kotlin DSL para cubrir necesidades reales.

Al finalizar, podrás identificar los bloques esenciales, crear tareas personalizadas y disponer de un ejemplo funcional listo para compilar y ejecutar un proyecto sencillo.

4.1 Sintaxis basada en Groovy vs Kotlin DSL

El archivo build.gradle utiliza Groovy de forma predeterminada, un lenguaje dinámico que favorece la concisión gracias a la inferencia de tipos y a la posibilidad de omitir paréntesis. La alternativa build.gradle.kts emplea la Kotlin DSL, que aporta tipado estático, autocompletado y mayor seguridad frente a errores de ejecución.

Aunque ambas DSL generan el mismo modelo interno, conviene elegir la que mejor se adapte al equipo: Groovy facilita copiar ejemplos existentes mientras que Kotlin DSL se integra mejor con herramientas modernas de desarrollo.

Ejemplo en Groovy

plugins {
  id 'java'
}

group = 'com.ejemplo'
version = '1.0.0'

repositories {
  mavenCentral()
}

Ejemplo equivalente en Kotlin DSL

plugins {
  java
}

group = "com.ejemplo"
version = "1.0.0"

repositories {
  mavenCentral()
}

Independientemente de la sintaxis, los bloques plugins, group, version y repositories cumplen la misma función; sólo cambian las reglas del lenguaje utilizado.

4.2 Definición de plugins, dependencias y repositorios

Los plugins extienden el alcance del build con comportamientos prediseñados, las dependencias describen los componentes externos que necesita la aplicación, y los repositorios indican dónde encontrarlos. Este conjunto de bloques convierte al script en una descripción declarativa del proyecto.

  • Plugins: se colocan al inicio para cargar capacidades como el plugin java o application.
  • Repositorios: enumeran orígenes como Maven Central y repositorios internos privados.
  • Dependencias: clasifican bibliotecas según su uso, ya sea para compilación, ejecución o pruebas.
plugins {
  id 'application'
}

repositories {
  mavenCentral()
  maven {
    url = uri('https://repo.miempresa.com/releases')
  }
}

dependencies {
  implementation 'org.apache.commons:commons-lang3:3.14.0'
  testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2'
}

Gradle resuelve conflictos de versiones aplicando estrategias configurables; por defecto elige la versión más reciente, aunque puedes definir reglas explícitas para garantizar estabilidad.

4.3 Configuración de tareas básicas

Las tareas encapsulan acciones atómicas. Los plugins aportan tareas listas para usar, como compileJava o test, y también es posible declarar tareas personalizadas con lógica específica. Cada tarea puede depender de otras para formar pipelines reproducibles.

tasks.register('imprimirVersion') {
  group = 'informes'
  description = 'Muestra la versión configurada del proyecto'
  doLast {
    println("Versión del proyecto: ${project.version}")
  }
}

tasks.register('prepararRecursos') {
  dependsOn('processResources')
  doLast {
    println('Recursos preparados correctamente.')
  }
}

Además de register, puedes usar named para ajustar tareas existentes sin redefinirlas. La combinación de dependencias y acciones doLast hace que el build sea expresivo y fácil de mantener.

4.4 Ejemplo mínimo de compilación y ejecución

Con los bloques anteriores se puede construir una aplicación ejecutable de forma inmediata. El siguiente script declara el plugin application, establece la clase principal y define las bibliotecas necesarias.

plugins {
  id 'application'
}

group = 'com.ejemplo'
version = '1.0.0'

repositories {
  mavenCentral()
}

dependencies {
  implementation 'com.google.guava:guava:33.0.0-jre'
  testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2'
}

application {
  mainClass = 'com.ejemplo.App'
}

tasks.withType(Test).configureEach {
  useJUnitPlatform()
}

Para construir este script, crea un archivo build.gradle en la raíz del proyecto y copia el bloque anterior. El archivo establece el plugin application, asigna el identificador del artefacto (group y version) y declara repositorios y dependencias necesarias para compilar y probar.

  1. Ubica tu proyecto en una carpeta vacía y guarda el archivo como build.gradle.
  2. Crea la estructura de código fuente en src/main/java/com/ejemplo/App.java con un main que imprima un mensaje.
  3. Opcional: agrega pruebas en src/test/java para aprovechar JUnit ya configurado.

Pasos de ejecución:

  1. Abre una terminal en la carpeta del proyecto.
  2. Ejecuta gradle build para descargar dependencias, compilar y lanzar las pruebas.
  3. Una vez superado el build, corre gradle run para iniciar la aplicación. Gradle invocará la clase principal definida en el bloque application.
    Salida de gradle run ejecutando la clase principal

Resumen didáctico

El archivo build.gradle centraliza la configuración del proyecto: define plugins, dependencias y repositorios, y organiza tareas que automatizan el ciclo de vida. Dominar la sintaxis de Groovy y Kotlin DSL permite alternar entre ambos estilos según el contexto y escribir scripts mantenibles que aceleren los builds.