Comment obtenir des valeurs d'un fichier de propriétés en utilisant Groovy?
J'ai besoin d'avoir un fichier de propriétés (.properties) qui aurait pour noms de fichier comme clé et leur chemin de destination comme valeur. J'aurai besoin que la clé soit résolue au moment de l'exécution, en fonction du fichier à déplacer.
Jusqu'à présent, il me semble que je peux charger les propriétés, mais je ne peux pas "obtenir" la valeur des propriétés chargées.
Je me suis référé au fil: groovy: Comment accéder au fichier de propriétés? et voici l'extrait de code que j'ai jusqu'à présent
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'])
}
le fichier de propriétés contient les entrées suivantes pour l'instant:
jan-feb-mar.jsp=/XX/Test/1
XX-1.0.0-SNAPSHOT.jar=/XX/Test/1
a=b
c=d
Les valeurs correctes sont renvoyées si je cherche en utilisant soit props.getProperty ('a') ou, config ['a'] Aussi essayé le code: notation
Mais dès que vous passez à la variable "key", comme dans config [key], elle retourne -> [:]
Je suis novice, je ne peux pas dire ce qui me manque ici.
Il me semble que vous compliquez trop les choses.
Voici un exemple simple qui devrait faire le travail:
Pour donné test.properties
fichier:
a=1
b=2
Ce code fonctionne 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'
Sauf si File
est nécessaire et si le fichier à charger se trouve dans le dossier src/main/resources
Ou src/test/resources
Ou dans le chemin de classe, getResource()
est un autre moyen de le résoudre. .
par exemple.
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"
Au cas où...
Si une clé de propriété contient un point (.), N'oubliez pas de la mettre entre guillemets.
fichier de propriétés:
a.x = 1
sensationnel:
Properties properties ...
println properties."a.x"
Si nous avions un problème similaire, nous l'avons résolu avec:
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