2010-11-17 11 views
30

मुझे लगता है कि निम्नलिखित करता है एक चींटी फ़ाइल है:मैं किसी चींटी प्रॉपर्टी फ़ाइल को दूसरे में मान सेट को ओवरराइड करने की अनुमति कैसे दे सकता हूं?

<property file="project.properties" description="Project configuration properties"/> 
<property file="build-defaults.properties" description="default build configuration."/> 
<property file="build.properties" description="local build configuration overrides"/> 

मैं चूक build-defaults.properties में सेट (जो एससीएम करने के लिए चेक किया गया है) के लिए लेकिन डेवलपर्स एक स्थानीय निर्माण में मूल्यों को भी पार करने की अनुमति चाहते हैं। गुण ताकि वे स्थानीय पथों के साथ काम कर सकें।

समस्या यह है कि यह काम नहीं कर रहा है; मैंने इसे सेट अप किया है, build.properties में ओवरराइड बनाया है, लेकिन मेरे पथ का मूल्य build-defaults.properties में एक सेट बना हुआ है। मैं इसे कैसे पूर्ण करूं?

उत्तर

46

आपके सेट अप के साथ प्रारंभिक समस्या यह है कि आपको build.properties और build-defaults.properties उलट दिया गया है।

Ant Properties एक बार सेट किए जाते हैं और फिर कभी ओवरराइड नहीं किया जा सकता है। यही कारण है कि -Dproperty=value के माध्यम से कमांड लाइन पर कोई भी संपत्ति सेट करना हमेशा फ़ाइल में सेट की गई किसी भी चीज को ओवरराइड करेगा; संपत्ति सेट है और फिर कुछ भी इसे ओवरराइड नहीं कर सकता है।

तो जिस तरह से आप इस सेट अप चाहते हैं:

<property file="build.properties" description="local build configuration overrides"/> 
<property file="project.properties" description="Project configuration properties"/> 
<property file="build-defaults.properties" description="default build configuration."/> 

इस तरह:

  1. कुछ भी कमांड लाइन पर सेट build.properties
  2. कुछ भी निर्माण में सेट पर पूर्वता लेता है। गुण लाइन के नीचे अन्य मान
  3. आदि ओवरराइड करता है।
17

असल में चींटी गुण ओवरड्रिड हो सकते हैं। property task के दस्तावेज़ देखें:

आम तौर पर संपत्ति मूल्यों बदला नहीं जा सकता है, एक बार एक संपत्ति के लिए निर्धारित है, सबसे कार्यों अपने मूल्य को संशोधित करने की अनुमति नहीं दी जाएगी।

संपत्ति मान को ओवरराइड करने में सक्षम कार्यों में से एक script है। इसके अलावा कोई भी कस्टम कार्य इस पिछवाड़े का उपयोग कर सकता है। अन्य प्रस्ताव प्रश्न Ant loadfile override property में हैं। यह चींटी की भावना और आमतौर पर अनावश्यक है। लेकिन यह जानना अच्छा है कि, क्योंकि मुझे अभी एक विपरीत समस्या थी: क्यों संपत्ति मूल्य बदल गया हालांकि यह अपरिवर्तनीय है।

यहां एक नमूना लक्ष्य है जो किसी संपत्ति के मूल्य को बदलने के लिए स्क्रिप्ट कार्य का उपयोग करता है। यह गुणों के साथ काम करने के लिए बुनियादी तरीकों को दिखाता है। चींटी एपी में सभी विधियों का वर्णन किया गया है जो ऑनलाइन उपलब्ध नहीं है। आपको Ant Manual डाउनलोड करने की आवश्यकता है। इसकी api निर्देशिका में एपीआई दस्तावेज है।

<target name="t1"> 
    <property name="a" value="one" /> 
    <script language="javascript"> 
     sProp = project.getProperty("a"); 
     sProp = sProp.replace("e", "ly"); 
     project.setProperty("a", sProp); 
     project.setNewProperty("a", "new value"); 
    </script> 
    <property name="a" value="two" /> 
    <echo>a=${a}</echo> 
    </target> 

कितनी आसानी से सेटअप script कार्य करने के लिए?beanshell भाषा के साथ चल रहे स्क्रिप्ट कार्य को बनाना थोड़ा मुश्किल और गैर-तुच्छ है, लेकिन यह this answer में समझाया गया है। हालांकि Rebse नोट किया गया है, javascript भाषा का उपयोग jdk 6 में बॉक्स से बाहर समर्थित है।

+2

स्क्रिप्ट कार्य की स्थापना, जब JDK> = 1.6 का उपयोग कर मुश्किल नहीं है पहले से ही एक जावास्क्रिप्ट इंजन के साथ JDK जहाजों के रूप में बिना किसी अतिरिक्त जार की जरूरत (बीन स्क्रिप्टिंग फ्रेमवर्क और सामान ..) अब और इसका मतलब है (राइनो 1.6R2 के आधार पर)। जावास्क्रिप्ट के साथ बस स्क्रिप्ट कार्य का उपयोग करें .. वैकल्पिक रूप से ग्रोवी का उपयोग करें जिसके लिए केवल एक जार – Rebse

+1

@Rebse की आवश्यकता है, आपने अपना दिन 'जावास्क्रिप्ट' सुझाव के साथ बनाया है। यह एक सम्मोहन की तरह काम करता है! मैंने इसे शामिल करने के लिए अपना जवाब संपादित किया। अन्य भाषाओं के लिए, भले ही उन्हें केवल एक जार की आवश्यकता हो, लिंक अभी भी उपयोगी है। – Jarekczek

+0

लापरवाही पदोन्नति चेतावनी ;-) चींटी एडन फ्लैक (http://code.google.com/p/flaka/) कई स्क्रिप्टिंग भागों obsolet (संपत्ति अधिलेखित, loops ..) बनाता है, केवल एक जार की जरूरत है। Flaka के अलावा मैं ग्रोवी बहुत उपयोग करता हूं - न केवल चींटी स्क्रिप्टिंग के लिए। – Rebse

3

चींटी संपत्ति मैक्रो का उपयोग और जावास्क्रिप्ट प्लग-इन करने के लिए जब तक ओवरराइट नहीं किया जा सकता है:

चरण 1: एक मैक्रो समारोह को परिभाषित संपत्ति अधिलेखित करने के लिए

<!--overwrite property's value--> 
    <macrodef name="set" > 
     <attribute name="name"/> 
     <attribute name="value"/> 
     <sequential> 
      <script language="javascript"> 
       <![CDATA[ 
       project.setProperty("@{name}", "@{value}"); 
       ]]> 
      </script> 
     </sequential> 
    </macrodef> 

चरण 2: में मैक्रो का उपयोग चींटी एक्सएमएल

<set 
    name="your_target_property" 
    value="your_value" or "${another_property}"  
</set> 
संबंधित मुद्दे

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