2010-08-25 14 views
9

To brzmi dla mnie trochę daleko, ale czy istnieje zadanie ANT do oglądania katalogu zmian, a następnie uruchamiania określonej klasy ANT, gdy katalog się zmienia?Czy istnieje zadanie ANT do oglądania katalogu zmian?

+0

Cóż, nie znalazłem prostego rozwiązania tego problemu, więc używam na razie konkretnej komendy bash: 'inoticoming - theground ./src/ ant \;' – leeand00

Odpowiedz

5

Jeśli pliki mogą być dodawane lub zmieniane tylko w obserwowanym katalogu, można użyć tego prostego zadania OutOfDate z antcontrib.

<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> 

Jeśli pliki mogą zniknąć z obserwowanym-dir, to masz bardziej skomplikowany problem, który można rozwiązać poprzez stworzenie struktury katalogów cieniu obserwowanych katalogu i sprawdzenie, czy jego zgodne z obserwowanym-dir. To zadanie jest bardziej skomplikowane, ale dam wam skrypt do tworzenia katalogu cień, ponieważ nie jest to proste:

<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> 

Z cienia utworzonego katalogu, Zostawię za zadanie sprawdzanie spójności katalogu jako ćwiczenie dla czytelnika.

+3

Nie ma znaczenia, czy katalog docelowy ma starsze pliki niż katalog źródłowy. Chcę wykonać zadanie ant, które będzie obserwować katalog, a kiedy zapiszę zmiany w pliku w edytorze, zadzwoni on do konkretnego zadania ante. – leeand00

1

Być może będziesz mógł skorzystać z zadania Waitfor, aby osiągnąć to, co chcesz. Blokuje się, dopóki nie spełni się jeden lub więcej warunków (takich jak obecność określonego pliku).

+0

To zadanie z mrówkami wykonuje jednak sondowanie. Czy nie ma sposobu, aby zlecenie ant zasubskrybowało katalog zmian? – leeand00

+1

Co masz na myśli mówiąc "subskrybuj"? Oglądaj zdarzenia systemu plików? – akr

0

Można łączyć zadania apply z fileset selector

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

The zestawu plików sprawdzi pliki przeciwko przechowywanej sumy kontrolnej MD5 dla zmian. Będziesz musiał umieścić ANT w pętli, aby wielokrotnie uruchamiać tę kontrolę. to jest łatwe do zrobienia w Unix:

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

Tak istnieje Ant zadanie, które będzie to zrobić:

https://github.com/chubbard/WatchTask

Wymaga 1.7+. Może oglądać dowolną liczbę zestawów plików i wywoływać dowolny cel w zależności od tego, z którego zestawu plików pochodzi.

+0

Nie ma licencji ... :( –

+1

@JethroLarson teraz to robi.Dodano tego samego dnia co Twój komentarz, wydaje się. :) – kekkis

+0

jeszcze nie wymyśliłem jak go używać, nie wiem gdzie znaleźć JAR ich odniesienie, za mało dokumentacji. – Vadorequest

Powiązane problemy