2014-10-23 7 views
7

Sto provando a definire un array nel file gradle.properties. Quando, per esempio, faccio il prossimo in alcuni script Gradle:Dichiarare array/hashmap nel file gradle.properties

project.ext.mygroup = [ 
    myelement1: "myvalue1", 
    myelement2: "myvalue2" 
] 
project.mygroup.put("myelement3", "myvalue3"); // As internally it works like a hashmap 

e poi elencare le proprietà, ottengo:

mygroup: {myelement1=myvalue1, myelement2=myvalue2, myelement3=myvalue3} 

Quindi, se provo impostare una proprietà con la stessa forma nel file gradle.properties:

mytestgroup={myelement1=myvalue1, myelement2=myvalue2} 

E poi nello script Gradle provo ad accedere a questa proprietà:

project.mytestgroup.put("myelement3", "myvalue3"); 

ottengo l'errore successivo:

No signature of method: java.lang.String.put() is applicable for argument types: (java.lang.String, java.lang.String) values: [myelement3, myvalue3] 

Questo perché la proprietà "mytestgroup" viene preso come una stringa invece di un array.

Qualcuno sa qual è la sintassi corretta per dichiarare una matrice nel file gradle.properties?

Grazie in anticipo

+8

Non è possibile impostare un elenco o un valore di mappa in 'gradle.properties', poiché si tratta di un semplice file di proprietà Java in cui tutti i valori sono stringhe. –

risposta

2

La notazione {myelement1=myvalue1, myelement2=myvalue2, myelement3=myvalue3} è semplicemente una rappresentazione di stringa dell'oggetto come il risultato della chiamata Map.toString(). Groovy non è sintatticamente corretto.

Il primo esempio è il modo corretto per definire un Map.

def myMap = [ key : 'value' ] 

La definizione di un array è simile.

def myArray = [ 'val1', 'val2', 'val3' ] 
+0

Grazie Marco! So che è il modo corretto di definire array/hashmap in groovy, ma sto chiedendo del file gradle.properties che (secondo la risposta di Peter) non è groovy ma un file di proprietà java. – gomerudo

+0

Scusaci, suppongo di non aver letto completamente la tua domanda.Peter è corretto, i valori nei file delle proprietà possono essere solo stringhe. –

2

impostare la proprietà su JSON stringa

myHash = {"first": "Franklin", "last": "Yu"} 
myArray = [2, 3, 5] 

e analizzarlo in script di build con JsonSlurper:

def slurper = new groovy.json.JsonSlurper() 
slurper.parseText(hash) // => a hashmap 
slurper.parseText(array) // => an array 
0

Il modo JsonSlurper è buona, ma ho voluto un modo più pulito per definire sia una semplice stringa o un array come una proprietà. Ho risolto dichiarando la proprietà come:

mygroup=myvalue1 

o:

mygroup=myvalue1,myvalue2,myvalue3 

Poi all'interno Gradle recuperare la proprietà con:

Properties props = new Properties() 
props.load(new FileInputStream(file('myproject.properties'))) 
props.getProperty('mygroup').split(",") 

e si otterrà un array di stringa. Fai attenzione ai personaggi spaziali attorno alle virgole.