Это звучит немного странно, но есть ли задача ANT для отслеживания изменений в каталоге и запуска определенного класса ANT при изменении каталога?
Если файлы можно добавлять или изменять только в отслеживаемом каталоге, вы можете использовать это простая задача OutOfDate от 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>
Если файлы могут исчезать из наблюдаемого каталога, то у вас есть более сложная проблема, которую вы можете решить, создав теневую структуру каталогов наблюдаемого каталога и проверив ее соответствие наблюдаемому каталогу. Эта задача более сложная, но я дам вам сценарий для создания теневого каталога, поскольку он не является прямым:
<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>
Создав теневой каталог, я оставлю задачу проверки целостности каталога в качестве упражнения для читатель.
Возможно, вы сможете использовать задачу Ждать
для достижения желаемого. Он блокируется до тех пор, пока одно или несколько условий (например, наличие определенного файла) не станут истинными.
Вы можете комбинировать задачу apply с селектором набора файлов
<apply executable="somecommand" parallel="false">
<srcfile/>
<fileset dir="${watch.dir}">
<modified/>
</fileset>
</apply>
Набор файлов будет проверять файлы по сохраненной контрольной сумме MD5 на наличие изменений. Вам нужно будет поместить ANT в цикл, чтобы многократно запускать эту проверку. это легко сделать в Unix:
while true
> do
> ant
> sleep 300
> done