есть задача ANT для отслеживания каталога на предмет изменений?

Это звучит немного странно, но есть ли задача ANT для отслеживания изменений в каталоге и запуска определенного класса ANT при изменении каталога?

9
задан leeand00 25 August 2010 в 11:00
поделиться

3 ответа

Если файлы можно добавлять или изменять только в отслеживаемом каталоге, вы можете использовать это простая задача 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>

Создав теневой каталог, я оставлю задачу проверки целостности каталога в качестве упражнения для читатель.

5
ответ дан 3 November 2019 в 01:52
поделиться

Возможно, вы сможете использовать задачу Ждать для достижения желаемого. Он блокируется до тех пор, пока одно или несколько условий (например, наличие определенного файла) не станут истинными.

1
ответ дан 3 November 2019 в 01:52
поделиться

Вы можете комбинировать задачу apply с селектором набора файлов

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

Набор файлов будет проверять файлы по сохраненной контрольной сумме MD5 на наличие изменений. Вам нужно будет поместить ANT в цикл, чтобы многократно запускать эту проверку. это легко сделать в Unix:

while true
> do
> ant
> sleep 300
> done
0
ответ дан 3 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: