🔧 Cómo leer variables de Gradle en Java: 3 formas prácticas


A veces necesitamos que Java conozca datos definidos en el build.gradle
(como una versión, un ID o una URL). Pero replicarlos en código Java no es elegante ni mantenible.
Aquí te muestro 3 formas de leer variables de Gradle directamente en Java, con ejemplos sencillos y distintos a los típicos.
✨ 1. Generar una clase Java automáticamente
Primero definimos una variable en build.gradle
:
ext {
apiBaseUrl = 'https://api.misitio.dev'
}
Creamos un directorio para código generado y lo incluimos en los sourceSets
:
def generatedDir = "$buildDir/generated-code"
sourceSets {
main {
java {
srcDirs += generatedDir
}
}
}
Luego agregamos una tarea que genere una clase ApiConfig
:
tasks.register('generateApiConfig') {
doLast {
def output = file("$generatedDir/com/ejemplo/config")
output.mkdirs()
def archivo = new File(output, "ApiConfig.java")
archivo.text = """
package com.ejemplo.config;
public final class ApiConfig {
public static final String API_URL = "${apiBaseUrl}";
private ApiConfig() {}
}
""".stripIndent()
}
}
💡 Agrega esta tarea como dependencia del compilado:
compileJava.dependsOn generateApiConfig
Y úsalo en Java como:
assertEquals("https://api.misitio.dev", ApiConfig.API_URL);
📄 2. Crear un archivo de propiedades
Otro enfoque: generar un .properties
con la variable.
def resourcesDir = "$buildDir/generated-res"
sourceSets {
main {
resources {
srcDirs += resourcesDir
}
}
}
Tarea para crear el archivo:
tasks.register('generateApiProperties') {
doLast {
def dir = file("$resourcesDir/main")
dir.mkdirs()
new File(dir, "api.properties").text = "API_URL=${apiBaseUrl}"
}
}
Y lo leemos así:
Properties props = new Properties();
props.load(getClass().getClassLoader().getResourceAsStream("api.properties"));
String url = props.getProperty("API_URL");
assertEquals("https://api.misitio.dev", url);
No olvides:
compileJava.dependsOn generateApiProperties
🌍 3. Inyectar como variable del sistema o del entorno
¿Solo lo necesitas en pruebas o ejecución? Usa inyección:
test {
systemProperty "API_URL", "${apiBaseUrl}"
environment "API_URL", "${apiBaseUrl}"
}
Y desde Java:
System.out.println(System.getProperty("API_URL"));
System.out.println(System.getenv("API_URL"));
Ideal si usas bootRun
, test
, o scripts personalizados.
🧠 ¿Cuál elegir?
Método | Pros | Contras |
Clase Java generada | Tipado, autocompletado, seguridad | Menos dinámico |
Archivo .properties | Compatible, versátil | Necesitas leer el archivo |
Variables del sistema | Muy simple, ideal para testing | No detectado en compilación |
✅ Conclusión
No hay una única forma correcta. Cada técnica brilla en su contexto.
Elige el método que mejor se adapte a tu flujo y automatiza esa variable para siempre 😎
Subscribe to my newsletter
Read articles from Carlos Exposito directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
