Saltar al contenido

¿Cómo leer archivos de propiedades y usar los valores en el script del proyecto Gradle?

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,

  1. dev
  2. prueba
  3. 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:

  1. gradle -q printProperties

    Current Environment: dev
    serverName:  http://localhost
    serverPort:  8080
    resources.serverName:  localhost
    resources.serverPort:  8090
    
  2. gradle -q -Penv=dev printProperties

    Current Environment: dev
    serverName:  http://localhost
    serverPort:  8080
    resources.serverName:  localhost
    resources.serverPort:  8090
    
  3. gradle -q -Penv=test printProperties

    Current Environment: test
    serverName:  http://www.testserver.com
    serverPort:  5211
    resources.serverName:  resources.testserver.com
    resources.serverPort:  8090
    
  4. gradle -q -Penv=prod printProperties

    Current Environment: prod
    serverName:  http://www.productionserver.com
    serverPort:  80
    resources.serverName:  resources.productionserver.com
    resources.serverPort:  80
    
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *