2014-10-23 23 views
7

Tôi đang cố định nghĩa một mảng trong tệp gradle.properties. Khi nào, ví dụ, tôi làm tiếp theo trong một số kịch bản gradle:Khai báo mảng/băm trong tệp gradle.properties

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

và sau đó tôi liệt kê các thuộc tính, tôi nhận được:

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

Vì vậy, nếu tôi cố gắng thiết lập một tài sản với các hình thức tương tự trong gradle.properties file:

mytestgroup={myelement1=myvalue1, myelement2=myvalue2} 

Và sau đó trong kịch bản gradle tôi cố gắng truy cập vào khách sạn này:

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

tôi nhận được lỗi sau:

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

Điều này là do tài sản "mytestgroup" đang được thực hiện như là một chuỗi thay vì một mảng.

Có ai biết cú pháp chính xác để khai báo mảng trong tệp gradle.properties không?

Cảm ơn trước

+8

Bạn không thể đặt giá trị danh sách hoặc bản đồ trong 'gradle.properties', vì đây là tệp thuộc tính Java thuần túy trong đó tất cả các giá trị là chuỗi. –

Trả lời

2

Ký hiệu {myelement1=myvalue1, myelement2=myvalue2, myelement3=myvalue3} chỉ đơn giản là một chuỗi đại diện của đối tượng như là kết quả của việc gọi Map.toString(). Nó không phải là cú pháp Groovy đúng.

Ví dụ đầu tiên của bạn là cách chính xác để xác định Map.

def myMap = [ key : 'value' ] 

Xác định mảng giống nhau.

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

Cảm ơn Mark! Tôi biết đó là cách chính xác để xác định mảng/hashmap trong groovy, nhưng tôi hỏi về tệp gradle.properties (theo câu trả lời của Peter) không phải là groovy mà là một tệp thuộc tính java. – gomerudo

+0

Xin lỗi về điều đó, tôi cho rằng tôi đã không đọc hết câu hỏi của bạn.Peter là chính xác, các giá trị trong các tập tin thuộc tính chỉ có thể là chuỗi. –

2

Đặt tài sản để JSON chuỗi

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

và phân tích nó trong xây dựng kịch bản với JsonSlurper:

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

Cách JsonSlurper là tốt, nhưng tôi muốn có một cách sạch hơn để xác định cả một chuỗi đơn giản hoặc một mảng làm thuộc tính. Tôi giải quyết nó bằng cách tuyên bố tài sản như:

mygroup=myvalue1 

hay:

mygroup=myvalue1,myvalue2,myvalue3 

Sau đó bên Gradle lấy tài sản với:

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

Và bạn sẽ nhận được một mảng của chuỗi. Hãy cẩn thận với các ký tự khoảng trắng xung quanh dấu phẩy.

Các vấn đề liên quan