2010-01-26 15 views
5

मैं चींटी 1.6.2 का उपयोग कर रहा हूं और एक ऐसा कार्य स्थापित करने की कोशिश कर रहा हूं जो स्रोत और लक्ष्य निर्देशिका की तुलना करेगा, स्रोत निर्देशिका में मौजूद सभी उप-निर्देशिकाओं की पहचान करें और लक्षित निर्देशिका में उपनिर्देशिका नामित पसंद को हटा दें।मैं फ़ाइलसेट का उपयोग कर चींटी में उपनिर्देशिका कैसे चुनूं?

तो, स्रोत निर्देशिका में उप निर्देशिका उप 1, उप 2, और उप 3 है और लक्ष्य निर्देशिका में उप 1, उप 2, उप 3, और उप 4 है, तो मैं sub1, sub2, और sub3 को हटाना चाहता हूं लक्ष्य डीआईआर

मैंने सोचा कि मैं लक्ष्य में मौजूद स्रोतों की सभी निर्देशिकाओं की पहचान करने के लिए फ़ाइल चयनकर्ता का उपयोग कर ऐसा कर सकता हूं। हालांकि, मुझे निर्देशिकाओं के लिए एक मैच वापस करने के लिए < प्रकार> फ़ाइल चयनकर्ता नहीं मिल सकता है।

अंत में, मैं सोचा मैं कुछ ऐसा करना चाहते हैं:

<fileset id="dirSelector" dir="${install.dir}"> 
    <type type="dir"/> 
    <present targetdir="${dist.dir}"/> 
</fileset> 

मैं सिर्फ निर्देशिका स्रोत निर्देशिका में मौजूद सूची और उन्हें बाहर प्रिंट करने का प्रयास हुए शुरू किया:

<fileset id="dirSelector" dir="${install.dir}"> 
    <type type="dir"/> 
</fileset> 
<property name="selected" refid="dirSelector" /> 
<echo>Selected: ${selected}</echo> 

हालांकि, मुझे टाइप चयनकर्ता के साथ निर्देशिका में सेट कुछ भी मुद्रित नहीं होता है। अगर मैं फ़ाइल को टाइप में बदलता हूं तो मुझे फाइलों को मुद्रित किया जाता है।

क्या मैं जो करने की कोशिश कर रहा हूं उसे पूरा करने का एक बेहतर तरीका है? क्या मैं टाइप चयनकर्ता के उपयोग में कुछ खो रहा हूं?

उत्तर

4

एक कस्टम चींटी कार्य लिखने के बिना, यह थोड़ा गन्दा होने वाला है। यदि आप ant-contrib लाइब्रेरी का उपयोग करने में प्रसन्न हैं तो निम्नलिखित को चाल चलनी चाहिए। यह एक हैक का एक सा है (विशेष रूप से जिस तरह से यह गुणों का उपयोग करता है) लेकिन ऐसा लगता है कि यह ठीक काम करता है।

<project name="stackoverflow" default="delete_target_dirs"> 

    <taskdef resource="net/sf/antcontrib/antlib.xml"> 
    <classpath> 
     <pathelement location="ant-contrib-1.0b3.jar"/> 
    </classpath> 
    </taskdef> 

    <property name="src.dir" value="src"/> 
    <property name="target.dir" value="target"/> 

    <target name="delete_target_dirs"> 

    <for param="file"> 
     <path> 
     <dirset dir="${src.dir}"> 
      <include name="**"/> 
     </dirset> 
     </path> 

     <sequential> 
     <basename property="@{file}_basename" file="@{file}" /> 
     <available property="@{file}_available" file="${@{file}_basename}" filepath="${target.dir}" /> 
     <if> 
      <equals arg1="${@{file}_available}" arg2="true"/> 
      <then> 
      <delete verbose="true"> 
       <dirset dir="${target.dir}" includes="${@{file}_basename}"/> 
      </delete> 
      </then> 
     </if>     
     </sequential> 
    </for> 

    </target> 

</project> 
+1

सहायता के लिए धन्यवाद। मैं वर्तमान में चींटी contrib पुस्तकालय का उपयोग नहीं करता है, इसलिए मुझे लगा कि मैं आपके द्वारा सुझाए गए कस्टम कार्य मार्ग का प्रयास करूंगा। यह काफी आसान हो गया और महान काम किया। धन्यवाद। –

+0

@EricRosenberg क्या आप कस्टम कार्य को अपने उत्तर के रूप में पोस्ट कर सकते हैं? यह SO के साथ ठीक काम करता है, और यह कुछ ऐसा होगा जो हम खोज रहे हैं। –

+0

@OzairKafray क्षमा करें, लेकिन मेरे पास अब कस्टम कार्य कार्यान्वयन तक पहुंच नहीं है। –

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