Objetivo del tema
Exploraras herramientas avanzadas de Gradle para estandarizar builds, trabajar con proyectos multi-modulo y parametrizar configuraciones segun entorno.
Al finalizar, sabras generar el wrapper, organizar subproyectos, definir perfiles por ambiente y leer propiedades externas con seguridad.
El Gradle Wrapper fija la version de Gradle para todo el equipo. Genera los scripts gradlew
y gradlew.bat
junto al directorio gradle/wrapper
con la configuracion.
# Generar wrapper con una version especifica
gradle wrapper --gradle-version 8.8
# Ejecutar builds con el wrapper
./gradlew clean build
Incluye el wrapper en tu repositorio para evitar que otros desarrolladores instalen Gradle manualmente. Los pipelines de CI tambien deben usar los scripts gradlew
.
Un build multi-proyecto agrupa modulos relacionados bajo un mismo settings.gradle
. Cada subproyecto tiene su propio build.gradle
, pero comparten configuraciones comunes desde el proyecto raiz.
// settings.gradle
rootProject.name = 'plataforma'
include 'api', 'servicio-auth', 'cliente-web'
// build.gradle (raiz)
subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2'
}
}
tasks.register('buildAll') {
dependsOn(subprojects.collect { it.tasks.named('build') })
}
Usa project(':api').dependencies
para declarar dependencias entre modulos. Ejecuta ./gradlew :api:test
para apuntar a un subproyecto puntual.
Gradle permite variar la configuracion segun el entorno (desarrollo, staging, produccion). Puedes usar propiedades del sistema, variables de entorno o archivos .properties
especificos.
def entorno = findProperty('env') ?: 'dev'
def configPorEntorno = file("config/${entorno}.properties")
if (!configPorEntorno.exists()) {
throw new GradleException("No se encontro el archivo de configuracion para ${entorno}")
}
Properties props = new Properties()
configPorEntorno.withInputStream { props.load(it) }
ext {
apiUrl = props.getProperty('api.url')
featureFlagPago = props.getProperty('feature.pago', 'false').toBoolean()
}
println "Entorno seleccionado: ${entorno} (api: ${apiUrl})"
Ejecuta ./gradlew build -Penv=qa
para seleccionar otro perfil. Procura ignorar archivos sensibles con .gitignore
.
Las propiedades externas permiten parametrizar builds sin modificar el build.gradle
. Puedes definirlas en gradle.properties
, en linea de comandos (-Pclave=valor
) o como variables de entorno.
# gradle.properties
version=1.2.0
org.gradle.jvmargs=-Xmx1g -Dfile.encoding=UTF-8
despliegue.url=https://deploy.dev/api
println "Version del proyecto: ${project.version}"
println "URL de despliegue: ${findProperty('despliegue.url')}"
tasks.register('publicar') {
doLast {
def credencial = System.getenv('DEPLOY_TOKEN') ?: ''
if (credencial) {
println "Publicando con token..."
} else {
println "Token de despliegue no disponible, operacion en modo simulacion"
}
}
}
Evita hardcodear credenciales en el repositorio. Usa servicios de secretos del CI/CD o variables de entorno cifradas.
La configuracion avanzada de Gradle ofrece herramientas para estandarizar builds (wrapper), coordinar multi-proyectos, aplicar perfiles segun entorno y manejar propiedades parametrizadas. Estas practicas facilitan escalar equipos y automatizar despliegues con confianza.