Saltearse al contenido

Gradle

¿Qué es Gradle?

Gradle es una herramienta de build moderna y flexible. Es más rápido que Maven y usa Groovy o Kotlin DSL en lugar de XML.


Instalación

Linux/macOS

Ventana de terminal
# Con SDKMAN
sdk install gradle
# macOS con Homebrew
brew install gradle
# Verificar
gradle -version

Windows

Descarga desde gradle.org o usa Chocolatey:

Ventana de terminal
choco install gradle

build.gradle

Archivo de configuración en Groovy DSL.

Básico

plugins {
id 'java'
}
group = 'com.empresa'
version = '1.0.0'
java {
sourceCompatibility = '21'
targetCompatibility = '21'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.google.guava:guava:32.1.3-jre'
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
}
test {
useJUnitPlatform()
}

build.gradle.kts (Kotlin DSL)

Alternativa con tipado fuerte:

plugins {
java
}
group = "com.empresa"
version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
repositories {
mavenCentral()
}
dependencies {
implementation("com.google.guava:guava:32.1.3-jre")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
}
tasks.test {
useJUnitPlatform()
}

Dependencias

Configuraciones

dependencies {
// Disponible en compile y runtime
implementation 'com.google.gson:gson:2.10.1'
// Solo compile, no incluida en runtime
compileOnly 'org.projectlombok:lombok:1.18.30'
// Solo runtime
runtimeOnly 'com.h2database:h2:2.2.224'
// Solo tests
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
}

Excluir dependencias transitivas

dependencies {
implementation('com.example:biblioteca:1.0') {
exclude group: 'org.slf4j', module: 'slf4j-api'
}
}

Comandos Gradle

Listar tareas

Ventana de terminal
gradle tasks

Compilar

Ventana de terminal
gradle build

Compila, ejecuta tests y genera JAR en build/libs/.

Limpiar

Ventana de terminal
gradle clean

Ejecutar tests

Ventana de terminal
gradle test

Ejecutar aplicación

Ventana de terminal
gradle run

Requiere plugin application:

plugins {
id 'application'
}
application {
mainClass = 'com.empresa.Main'
}

Build sin tests

Ventana de terminal
gradle build -x test

Gradle Wrapper

Wrapper incluye Gradle en el proyecto. No necesitas instalarlo globalmente.

Generar wrapper

Ventana de terminal
gradle wrapper

Genera:

gradlew (script para Linux/macOS)
gradlew.bat (script para Windows)
gradle/
wrapper/
gradle-wrapper.jar
gradle-wrapper.properties

Usar wrapper

Ventana de terminal
./gradlew build

Ventaja: Todos los desarrolladores usan la misma versión de Gradle.


Plugins

Java

plugins {
id 'java'
}

Application

plugins {
id 'application'
}
application {
mainClass = 'com.empresa.Main'
}

Shadow (Fat JAR)

Empaqueta todas las dependencias en un solo JAR:

plugins {
id 'com.github.johnrengelman.shadow' version '8.1.1'
}
shadowJar {
archiveBaseName = 'mi-app'
archiveVersion = '1.0.0'
archiveClassifier = ''
}

Generar:

Ventana de terminal
gradle shadowJar

Multi-proyecto

mi-aplicacion/
├── settings.gradle
├── build.gradle
├── core/
│ └── build.gradle
└── web/
└── build.gradle

settings.gradle:

rootProject.name = 'mi-aplicacion'
include 'core', 'web'

build.gradle raíz:

subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
java {
sourceCompatibility = '21'
targetCompatibility = '21'
}
}

web/build.gradle:

dependencies {
implementation project(':core')
}

Tareas personalizadas

task hola {
doLast {
println 'Hola desde Gradle'
}
}

Ejecutar:

Ventana de terminal
gradle hola

Con parámetros:

task saludar {
doLast {
println "Hola ${project.findProperty('nombre') ?: 'Mundo'}"
}
}
Ventana de terminal
gradle saludar -Pnombre=Juan

Build cache

Acelera builds reutilizando salidas:

buildCache {
local {
enabled = true
}
}

O en la línea de comandos:

Ventana de terminal
gradle build --build-cache

Gradle vs Maven

AspectoMavenGradle
ConfiguraciónXML (pom.xml)Groovy/Kotlin DSL
VelocidadMás lentoMás rápido (incremental builds)
FlexibilidadConvención sobre configuraciónMuy flexible
Curva de aprendizajeMás simpleMás compleja
PopularidadMuy usado (legacy)Creciente (proyectos nuevos)

Recomendación: Maven para proyectos simples o corporativos. Gradle para proyectos modernos que necesitan flexibilidad.


Buenas prácticas

  1. Usa Gradle Wrapper: Commitea gradlew y gradle/ al repositorio.
  2. Especifica versiones de plugins.
  3. Aprovecha el build cache.
  4. Usa Kotlin DSL para proyectos nuevos (mejor autocompletado).

Próximo paso

Aprende sobre gestión de dependencias: Gestión de dependencias →