Solución:
Si usa el predeterminado gradle.properties
archivo, puede acceder a las propiedades directamente desde su build.gradle
expediente:
gradle.properties
:
applicationName=Admin
projectName=Hello Cool
build.gradle
:
task printProps {
doFirst {
println applicationName
println projectName
}
}
Si necesita acceder a un archivo personalizado o acceder a propiedades que incluyen .
en ellos (como parece que debe hacer), puede hacer lo siguiente en su build.gradle
expediente:
def props = new Properties()
file("build.properties").withInputStream { props.load(it) }
task printProps {
doFirst {
println props.getProperty("application.name")
println props.getProperty("project.name")
}
}
Eche un vistazo a esta sección de la documentación de Gradle para obtener más información.
Editar
Si desea configurar dinámicamente algunas de estas propiedades (como se menciona en un comentario a continuación), puede crear una properties.gradle
archivo (el nombre no es importante) y lo requiere en su build.gradle
texto.
properties.gradle
:
ext {
subPath = "some/sub/directory"
fullPath = "$projectDir/$subPath"
}
build.gradle
apply from: 'properties.gradle'
// prints the full expanded path
println fullPath
Podemos usar un archivo separado (config.groovy
en mi caso) para abstraer toda la configuración.
En este ejemplo, estamos usando tres entornos, a saber,
- dev
- prueba
- pinchar
que tiene propiedades nombre del servidor, Puerto de servicio y recursos. Aquí estamos esperando que la tercera propiedad recursos puede ser el mismo en varios entornos y así hemos abstraído esa lógica y anulado en el entorno específico donde sea necesario:
config.groovy
resources {
serverName="localhost"
serverPort="8090"
}
environments {
dev {
serverName="http://localhost"
serverPort="8080"
}
test {
serverName="http://www.testserver.com"
serverPort="5211"
resources {
serverName="resources.testserver.com"
}
}
prod {
serverName="http://www.productionserver.com"
serverPort="80"
resources {
serverName="resources.productionserver.com"
serverPort="80"
}
}
}
Una vez que el archivo de propiedades esté listo, podemos usar lo siguiente en build.gradle
para cargar estas configuraciones:
build.gradle
loadProperties()
def loadProperties() {
def environment = hasProperty('env') ? env : 'dev'
println "Current Environment: " + environment
def configFile = file('config.groovy')
def config = new ConfigSlurper(environment).parse(configFile.toURL())
project.ext.config = config
}
task printProperties {
println "serverName: $config.serverName"
println "serverPort: $config.serverPort"
println "resources.serverName: $config.resources.serverName"
println "resources.serverPort: $config.resources.serverPort"
}
Ejecutemos estos con diferentes conjuntos de entradas:
-
gradle -q printProperties
Current Environment: dev serverName: http://localhost serverPort: 8080 resources.serverName: localhost resources.serverPort: 8090
-
gradle -q -Penv=dev printProperties
Current Environment: dev serverName: http://localhost serverPort: 8080 resources.serverName: localhost resources.serverPort: 8090
-
gradle -q -Penv=test printProperties
Current Environment: test serverName: http://www.testserver.com serverPort: 5211 resources.serverName: resources.testserver.com resources.serverPort: 8090
-
gradle -q -Penv=prod printProperties
Current Environment: prod serverName: http://www.productionserver.com serverPort: 80 resources.serverName: resources.productionserver.com resources.serverPort: 80