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
# Con SDKMANsdk install gradle
# macOS con Homebrewbrew install gradle
# Verificargradle -versionWindows
Descarga desde gradle.org o usa Chocolatey:
choco install gradlebuild.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
gradle tasksCompilar
gradle buildCompila, ejecuta tests y genera JAR en build/libs/.
Limpiar
gradle cleanEjecutar tests
gradle testEjecutar aplicación
gradle runRequiere plugin application:
plugins { id 'application'}
application { mainClass = 'com.empresa.Main'}Build sin tests
gradle build -x testGradle Wrapper
Wrapper incluye Gradle en el proyecto. No necesitas instalarlo globalmente.
Generar wrapper
gradle wrapperGenera:
gradlew (script para Linux/macOS)gradlew.bat (script para Windows)gradle/ wrapper/ gradle-wrapper.jar gradle-wrapper.propertiesUsar wrapper
./gradlew buildVentaja: 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:
gradle shadowJarMulti-proyecto
mi-aplicacion/├── settings.gradle├── build.gradle├── core/│ └── build.gradle└── web/ └── build.gradlesettings.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:
gradle holaCon parámetros:
task saludar { doLast { println "Hola ${project.findProperty('nombre') ?: 'Mundo'}" }}gradle saludar -Pnombre=JuanBuild cache
Acelera builds reutilizando salidas:
buildCache { local { enabled = true }}O en la línea de comandos:
gradle build --build-cacheGradle vs Maven
| Aspecto | Maven | Gradle |
|---|---|---|
| Configuración | XML (pom.xml) | Groovy/Kotlin DSL |
| Velocidad | Más lento | Más rápido (incremental builds) |
| Flexibilidad | Convención sobre configuración | Muy flexible |
| Curva de aprendizaje | Más simple | Más compleja |
| Popularidad | Muy usado (legacy) | Creciente (proyectos nuevos) |
Recomendación: Maven para proyectos simples o corporativos. Gradle para proyectos modernos que necesitan flexibilidad.
Buenas prácticas
- Usa Gradle Wrapper: Commitea
gradlewygradle/al repositorio. - Especifica versiones de plugins.
- Aprovecha el build cache.
- Usa Kotlin DSL para proyectos nuevos (mejor autocompletado).
Próximo paso
Aprende sobre gestión de dependencias: Gestión de dependencias →