Obtener valores del archivo de propiedades usando Groovy


¿Cómo obtener valores del archivo de propiedades usando Groovy?

Necesito tener un archivo de propiedades (.propiedades) que tendrían nombres de archivo como clave, y su ruta de destino como el valor. Necesitaré que la clave se resuelva en tiempo de ejecución, dependiendo del archivo que necesite ser movido.

Hasta ahora puedo cargar las propiedades que parece, pero no puedo "obtener" el valor de las propiedades cargadas.

Me referí al hilo: groovy: ¿Cómo acceder al archivo de propiedades? y a continuación se muestra el fragmento de código que tengo hasta ahora

def  props = new Properties();
File propFile = 
          new File('D:/XX/XX_Batch/XX_BATCH_COMMON/src/main/resources/patchFiles.properties')
props.load(propFile.newDataInputStream())
def config = new ConfigSlurper().parse(props)
    def ant = new AntBuilder()
    def list = ant.fileScanner {
                fileset(dir:getSrcPath()) {
                    include(name:"**/*")
                }
    }
    for (f in list) {
       def key = f.name
       println(props)
       println(config[key])
       println(config)
       def destn = new File(config['a'])

    }

El archivo de propiedades tiene las siguientes entradas por ahora :

jan-feb-mar.jsp=/XX/Test/1
XX-1.0.0-SNAPSHOT.jar=/XX/Test/1
a=b
c=d

Los valores correctos se devuelven si miro hacia arriba usando cualquiera de las props.getProperty ('a') o, config ['a'] También probó el código: notación

Pero tan pronto como cambie a usar la variable "key", como en config[key] devuelve > > [:]

Soy nuevo en groovy, no puedo decir qué me estoy perdiendo aquí.

Author: Community, 2014-01-01

4 answers

Me parece que complicas demasiado las cosas.

Aquí hay un ejemplo simple que debería hacer el trabajo:

Para el archivo test.properties dado:

a=1
b=2

Este código funciona bien:

Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
    properties.load(it)
}

def runtimeString = 'a'
assert properties."$runtimeString" == '1'
assert properties.b == '2'
 87
Author: JBaruch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-01 21:04:54

Por si acaso...

Si una clave de propiedad contiene dot (.) a continuación, recuerde poner la clave entre comillas.

Archivo de propiedades:

a.x = 1

Groovy:

Properties properties ...

println properties."a.x"
 5
Author: Łukasz Dumiszewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-29 07:13:47

Tenía un problema similar, lo resolvimos con:

def content = readFile 'gradle.properties'

Properties properties = new Properties()
InputStream is = new ByteArrayInputStream(content.getBytes());
properties.load(is)

def runtimeString = 'SERVICE_VERSION_MINOR'
echo properties."$runtimeString"
SERVICE_VERSION_MINOR = properties."$runtimeString"
echo SERVICE_VERSION_MINOR
 3
Author: user3265317,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-15 13:42:48

A menos que File sea necesario, y si el archivo a cargar está en la carpeta src/main/resources o src/test/resources o en classpath, getResource() es otra forma de resolverlo.

Eg.

    def properties = new Properties()
    //both leading / and no / is fine
    this.getClass().getResource( '/application.properties' ).withInputStream {
        properties.load(it)
    }

    //then: "access the properties"
    properties."my.key"
 3
Author: prayagupd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-13 06:24:49