2014-10-23 12 views
7

मैं gradle.properties फ़ाइल में एक सरणी को परिभाषित करने का प्रयास कर रहा हूं। जब, उदाहरण के लिए, मैं कुछ Gradle लिपि में आगे क्या:gradle.properties फ़ाइल में सरणी/हैशैप घोषित करें

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

और फिर मैं गुण सूची, मैं मिलता है:

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

तो, अगर मैं एक ही फार्म के साथ एक संपत्ति सेट करने का प्रयास

mytestgroup={myelement1=myvalue1, myelement2=myvalue2} 

और फिर Gradle लिपि में मैं इस संपत्ति तक पहुँचने का प्रयास:

gradle.properties फ़ाइल में

मैं अगले त्रुटि मिलती है:

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

इसका कारण यह है संपत्ति "mytestgroup" एक स्ट्रिंग के बजाय एक सरणी के रूप में लिया जा रहा है।

क्या कोई जानता है कि gradle.properties फ़ाइल में सरणी घोषित करने के लिए सही वाक्यविन्यास क्या है?

अग्रिम

+8

आप 'gradle.properties' में कोई सूची या मानचित्र मान सेट नहीं कर सकते, क्योंकि यह एक सादा जावा गुण फ़ाइल है जहां सभी मान स्ट्रिंग हैं। –

उत्तर

2

अंकन {myelement1=myvalue1, myelement2=myvalue2, myelement3=myvalue3} धन्यवाद बस Map.toString() बुला के परिणाम के रूप वस्तु के एक स्ट्रिंग प्रतिनिधित्व है। यह अनुवांशिक रूप से ग्रोवी को सही नहीं है।

आपका पहला उदाहरण Map को परिभाषित करने का सही तरीका है।

def myMap = [ key : 'value' ] 

एक सरणी परिभाषित करना समान है।

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

धन्यवाद मार्क! मुझे पता है कि ग्रोवी में सरणी/हैशैप को परिभाषित करने का सही तरीका है, लेकिन मैं gradle.properties फ़ाइल के बारे में पूछ रहा हूं जो (पीटर के उत्तर के अनुसार) groovy नहीं बल्कि जावा गुण फ़ाइल है। – gomerudo

+0

इसके बारे में क्षमा करें, मुझे लगता है कि मैंने आपके प्रश्न को पूरी तरह से पढ़ा नहीं है।पीटर सही है, गुण फ़ाइलों में मूल्य केवल तार हो सकता है। –

2

JSON स्ट्रिंग

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

को प्रॉपर्टी सेट और JsonSlurper साथ निर्माण लिपि में उसे पार्स:

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

JsonSlurper तरह से अच्छा है, लेकिन मैं परिभाषित करने के लिए एक क्लीनर तरीका चाहता था संपत्ति के रूप में एक साधारण स्ट्रिंग या सरणी दोनों।

mygroup=myvalue1 

या:: मैं के रूप में संपत्ति की घोषणा के द्वारा इसे हल

mygroup=myvalue1,myvalue2,myvalue3 

फिर Gradle अंदर के साथ संपत्ति को पुनः प्राप्त:

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

और तुम स्ट्रिंग की एक सरणी मिल जाएगा। अल्पविराम के आस-पास अंतरिक्ष पात्रों से सावधान रहें।

संबंधित मुद्दे