/ / Ottieni valori dal file delle proprietà usando Groovy - groovy, file delle proprietà

Ottieni i valori dal file delle proprietà usando Groovy - groovy, properties-file

Come ottenere valori dal file delle proprietà usando Groovy?

Ho bisogno di avere un file delle proprietà (.proprietà) che avrebbero i nomi dei file come chiave e il loro percorso di destinazione come valore. Avrò bisogno che la chiave sia risolta in fase di esecuzione, a seconda del file che deve essere spostato.

Finora sono in grado di caricare le proprietà, a quanto pare, ma non riesco a "ottenere" il valore dalle proprietà caricate.

Ho fatto riferimento al thread: groovy: come accedere al file delle proprietà? e di seguito è riportato il frammento di codice che ho finora

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"])

}

il file delle proprietà ha le seguenti voci per ora:

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

I valori corretti vengono restituiti se cerco utilizzando props.getProperty ("a") o, config [ "a"] Ho anche provato il codice: notazione

Ma non appena si passa all'utilizzo della variabile "chiave", come in config [chiave] restituisce -> [:]

Sono nuovo di Groovy, non posso dire cosa mi sto perdendo qui.

risposte:

85 per risposta № 1

Mi sembra che tu complichi troppo le cose.

Ecco un semplice esempio che dovrebbe fare il lavoro:

Per dato test.properties file:

a=1
b=2

Questo codice funziona bene:

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"

4 per risposta № 2

Nel caso in cui...

Se una chiave di proprietà contiene punto (.), Ricordati di inserire la chiave tra virgolette.

file delle proprietà:

a.x = 1

Groovy:

Properties properties ...

println properties."a.x"

3 per risposta № 3

Salvo che File è necessario e se il file da caricare è in src/main/resources o src/test/resources cartella o nel percorso di classe, getResource() è un altro modo per risolverlo.

per esempio.

    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"

2 per risposta № 4

Abbiamo avuto un problema simile, lo abbiamo risolto 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