2014-10-23 10 views
7

Próbuję zdefiniować tablicę w pliku gradle.properties. Kiedy, na przykład, zrobić następny w pewnym Gradle skryptu:Zadeklaruj tablicę/hashmap w pliku gradle.properties.

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

a następnie I Wykaz właściwości, otrzymuję:

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

Więc gdybym spróbuj ustawić właściwość z tej samej formie w pliku gradle.properties:

mytestgroup={myelement1=myvalue1, myelement2=myvalue2} 

A potem w Gradle skryptu próbie uzyskania dostępu do tej własności:

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

dostanę następny błąd:

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

To dlatego, że właściwość „mytestgroup” jest traktowana jako ciąg zamiast tablicy.

Czy ktoś wie, jaka jest poprawna składnia, aby zadeklarować tablicę w pliku gradle.properties?

góry dzięki

+8

Nie można ustawić wartości listy lub mapy w pliku 'gradle.properties', ponieważ jest to zwykły plik właściwości Java, w którym wszystkie wartości są ciągami. –

Odpowiedz

2

notacji {myelement1=myvalue1, myelement2=myvalue2, myelement3=myvalue3} to po prostu reprezentacja ciąg obiektu jako wyniku wywołania Map.toString(). To nie jest poprawne pod względem składni Groovy.

Twój pierwszy przykład to poprawny sposób zdefiniowania Map.

def myMap = [ key : 'value' ] 

Definiowanie tablicy jest podobne.

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

Dzięki Mark! Wiem, że to jest poprawny sposób zdefiniowania tablicy/hashmap w groovy, ale pytam o plik gradle.properties, który (zgodnie z odpowiedzią Petera) nie jest groovy, ale plik właściwości java. – gomerudo

+0

Niestety, nie do końca przeczytałem twoje pytanie.Peter ma rację, wartości w plikach właściwości mogą być tylko ciągami. –

2

Ustaw właściwość do JSON ciąg

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

i przetwarza go w kompilacji skryptu z JsonSlurper:

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

JsonSlurper sposób jest dobry, ale chciałem czystszy sposób definiowania zarówno prosty ciąg lub tablica jako właściwość. Rozwiązałem go deklarując właściwości jak:

mygroup=myvalue1 

lub:

mygroup=myvalue1,myvalue2,myvalue3 

Następnie wewnątrz Gradle odzyskać nieruchomość z:

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

I dostaniesz tablicę ciągów. Uważaj na znaki spacji znajdujące się w pobliżu przecinków.