2010-08-25 29 views
9

यह मेरे लिए थोड़ा दूर लाता है, लेकिन क्या परिवर्तन के लिए निर्देशिका देखने के लिए एक एएनटी कार्य है और फिर निर्देशिका बदलते समय एक विशेष एएनटी कक्षा चला रहा है?क्या परिवर्तन के लिए निर्देशिका देखने के लिए कोई एएनटी कार्य है?

+0

खैर मुझे इस के लिए आसान समाधान नहीं मिला है, इसलिए मैं उस समय के लिए एक बैश विशिष्ट कमांड का उपयोग कर रहा हूं: 'inoticoming --foreground ./src/ ant \;' – leeand00

उत्तर

5

यदि फ़ाइलों को केवल देखे गए निर्देशिका में जोड़ा या बदला जा सकता है, तो आप antcontrib से इस सरल OutOfDate कार्य का उपयोग कर सकते हैं।

<property name="watched-dir.flagfile" 
    location="MUST be not in watched dir"/> 
<outofdate> 
    <sourcefiles> 
    <fileset dir="watched-dir"/> 
    </sourcefiles> 
    <targetfiles> 
    <pathelement location="${watched-dir.flagfile}"/>   
    </targetfiles> 
    <sequential> 

    <!--Tasks when something changes go here--> 

    <touch file="${watched-dir.flagfile}"/> 
    </sequential> 
</outofdate> 

फ़ाइलों देखा-निर्देशिका से गायब हो सकते हैं, तो आप और अधिक जटिल समस्या यह है कि आप देख चुके हैं dir की छाया निर्देशिका संरचना बनाने और देखा-निर्देशिका के साथ अपने संगत करता है, तो जाँच करके हल कर सकते हैं है। इस कार्य को और अधिक जटिल है, लेकिन मैं आपको, एक छाया निर्देशिका बनाने के लिए एक स्क्रिप्ट दे देंगे के रूप में यह सीधे आगे नहीं है:

<property name="TALK" value="true"/> 
<property name="shadow-dir" 
    location="MUST be not in watched dir"/> 

<touch 
    mkdirs="true" 
    verbose="${TALK}" 
> 
    <fileset dir="watched-dir"> 
    <patterns/> 
    <type type="file"/> 
    </fileset> 

    <!-- That's the tricky globmapper to make touch task work --> 
    <globmapper from="*" to="${shadow-dir}/*"/> 
</touch> 

<!-- 
    Due to how touch task with mapped fileset is implemented, it 
    truncates file access times down to a milliseconds, so if you 
    would have used outofdate task on shadow dir it would always 
    show that something is out of date. 

    Because of that, touching all files in ${shadow-dir} again fixes 
    that chicken and egg problem. 
--> 
<touch verbose="${TALK}"> 
    <fileset dir="${shadow-dir}"/> 
</touch> 

बनाया छाया निर्देशिका के साथ, मैं के रूप में जाँच निर्देशिका स्थिरता का कार्य छोड़ देंगे पाठक के लिए एक अभ्यास।

+3

इससे कोई फ़र्क नहीं पड़ता कि लक्ष्य निर्देशिका में स्रोत निर्देशिका की तुलना में पुरानी फ़ाइलें हैं या नहीं। मुझे एक चींटी कार्य चाहिए जो निर्देशिका को देखेगा और जब मैं संपादक में फ़ाइल में परिवर्तनों को सहेजता हूं, तो यह एक विशेष चींटी कार्य को कॉल करेगा। – leeand00

1

आप जो भी चाहते हैं उसे प्राप्त करने के लिए Waitfor कार्य का उपयोग करने में सक्षम हो सकते हैं। यह तब तक अवरुद्ध करता है जब तक एक या अधिक स्थितियों (जैसे कि किसी विशेष फ़ाइल की उपस्थिति) सच हो जाती है।

+0

वह चींटी कार्य हालांकि मतदान करता है। चींटी के लिए निर्देशिका में चींटी कार्य की सदस्यता लेने का कोई तरीका नहीं है? – leeand00

+1

"सदस्यता लें" के साथ आपका क्या मतलब है? फाइल सिस्टम घटनाओं के लिए देखो? – akr

0

आपने ऐसे बदलाव के लिए एक संग्रहीत MD5 चेकसम के खिलाफ फ़ाइलों की जाँच करेगा एक fileset selector

<apply executable="somecommand" parallel="false"> 
    <srcfile/> 
    <fileset dir="${watch.dir}"> 
    <modified/> 
    </fileset> 
</apply> 

फ़ाइलसेट साथ apply कार्य जोड़ सकते हैं। इस चेक को बार-बार चलाने के लिए आपको एएनटी को लूप में रखना होगा। इस यूनिक्स में करने के लिए आसान है:

while true 
> do 
> ant 
> sleep 300 
> done 
3

हाँ वहाँ एक चींटी कार्य है कि यह कर देगा है:

https://github.com/chubbard/WatchTask

यह 1.7+ की आवश्यकता है। यह किसी भी फाइलसेट को देख सकता है, और किसी भी लक्ष्य का आह्वान कर सकता है कि यह किस फाइलसेट से आया था।

+0

लाइसेंस नहीं है ... :( –

+1

@ जेथ्रोलार्सन अब यह करता है। उसी दिन आपकी टिप्पणी के रूप में जोड़ा गया है, ऐसा लगता है। :) – kekkis

+0

ने अभी तक इसका उपयोग कैसे किया है, यह नहीं पता कि कहां है जार को उनके संदर्भ में, पर्याप्त दस्तावेज़ीकरण नहीं ढूंढने के लिए। – Vadorequest