2012-01-27 11 views
21

ग्रैडल में एक तैनाती कार्य के हिस्से के रूप में, मैं विकास डेटाबेस के बजाय उत्पादन डेटाबेस को इंगित करने के लिए foo.properties में किसी संपत्ति का मान बदलना चाहता हूं।ग्राडल बिल्ड के दौरान मैं .properties फ़ाइल को कैसे बदल सकता हूं?

मैं पूरी फाइल को बिल्कुल सही नहीं बदलूंगा, क्योंकि यह बड़ा है और इसका मतलब है कि हमें दो अलग-अलग संस्करणों को बनाए रखना होगा जो केवल एक पंक्ति पर भिन्न होते हैं।

इसे पूरा करने का सबसे अच्छा तरीका क्या है?

उत्तर

28

आप ant.propertyfile कार्य का उपयोग कर सकते हैं:

ant.propertyfile(
     file: "myfile.properties") { 
     entry(key: "propertyName", value: "propertyValue") 
     entry(key: "anotherProperty", operation: "del") 
    } 
3

फ़ाइल लिखने के लिए java.util.Properties का उपयोग करने वाले एक कार्य को कोड करना एक साधारण समाधान है। यदि आप वास्तव में फ़ाइल को क्रमशः अद्यतन करना चाहते हैं, तो आपको इसे अपने आप लागू करना होगा। या हो सकता है कि आपको एक चींटी कार्य मिल जाए जो आप चाहते हैं (सभी चींटी कार्यों का उपयोग ग्रैडल से किया जा सकता है)। सर्वोत्तम परिणामों के लिए, आपको कार्य के इनपुट और आउटपुट भी घोषित करना चाहिए, ताकि ग्राडल केवल कार्यों को निष्पादित करे जब गुण फ़ाइल को बदलने की आवश्यकता हो।

+0

तुम भी अपाचे कॉमन्स विन्यास पुस्तकालय जो एक और अधिक सुविधाजनक एपीआई (http://commons.apache.org/configuration/userguide/howto_filebased.html) प्रदान करता है का उपयोग कर सकते हैं। बेशक, आपको अभी भी अधिकांश तर्क स्वयं को लागू करना होगा। – rodion

+0

चींटी [प्रॉपर्टीफाइल कार्य] (http://ant.apache.org/manual/Tasks/propertyfile.html) ने वही किया जो मुझे चाहिए था। –

6

आप करता है कि आप क्या चाहते हैं एक चींटी "की जगह" कार्य बंद आग में सक्षम होना चाहिए: http://ant.apache.org/manual/Tasks/replace.html

ant.replace(file: "blah", token: "wibble", value: "flibble") 
1

एक गुण बनाएं ऑब्जेक्ट, फिर लक्षित ऑब्जेक्ट फ़ाइल पथ के साथ फ़ाइल ऑब्जेक्ट बनाएं, लोड ऑब्जेक्ट्स पर फ़ाइल लोड करें, वांछित प्रॉपर्टी को सेटप्रॉपर्टी के साथ सेट करें, और स्टोर के साथ बदलावों को सहेजें।

def var = new Properties() 
File myfile = file("foo.properties"); 

var.load(myfile.newDataInputStream()) 
var.setProperty("db", "prod") 
var.store(myfile.newWriter(), null) 
+4

कृपया कुछ दस्तावेज/स्पष्टीकरण जोड़ें। –

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