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 № 1Mi 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