Obtener valores del archivo de propiedades usando Groovy
properties-file (4)
¿Cómo obtener valores del archivo de propiedades usando Groovy?
Necesito tener un archivo de propiedad (.properties) que tenga nombres de archivo como clave y su ruta de destino como valor. Necesitaré que la clave se resuelva en tiempo de ejecución, según el archivo que se deba mover.
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 siguiente es 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
Se devuelven los valores correctos si busco usando props.getProperty (''a'') o, config [''a''] También probé el código: notación
Pero tan pronto como cambie a usar la variable "clave", como en config [tecla], regresa -> [:]
Soy nuevo en Groovy, no puedo decir lo que me falta aquí.
A menos que el File
sea necesario, y si el archivo que se va a cargar está en la carpeta src/main/resources
o src/test/resources
o en classpath, getResource()
es otra forma de resolverlo.
p.ej.
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"
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''
Por si acaso...
Si una clave de propiedad contiene punto (.), Recuerde poner la clave entre comillas.
archivo de propiedades:
a.x = 1
groovy:
Properties properties ...
println properties."a.x"
Tuve 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