Почему ANT обновляет содержимое набора файлов после его создания, и могу ли я переопределить это?
Я думаю, что это может быть проще всего объяснить на примере, так что здесь идет:
<target name="test">
<fileset id="fileset" dir="target">
<include name="*"/>
</fileset>
<echo>${toString:fileset}</echo>
<touch file="target/test"/>
<echo>${toString:fileset}</echo>
</target>
Выходы:
test:
[echo]
[touch] Creating target/test
[echo] test
В идеале я хочу, чтобы набор файлов оставался таким же, чтобы у меня был набор до / после (чтобы получить измененный набор, используя <difference>
так что, если вы знаете способ пропустить прямо к этому...).
Я пытался использовать <filelist>
вместо этого, но я не могу получить это правильно заполнить и сравнить в <difference>
задача (их также сложно отлаживать, так как я не могу вывести их содержимое). Я также пытался использовать <modified/>
выбрать файлы в наборе файлов, но он, кажется, не работает вообще и всегда ничего не возвращает.
Даже если есть альтернативный подход, я был бы признателен за лучшее понимание того, что делает ANT в приведенном выше примере и почему.
3 ответа
Селектор пути оценивается на лету. Когда файл добавлен, он будет отражен в наборе при его использовании.
Вы можете оценить и сохранить его в переменной, используя pathconvert. Затем это может быть преобразовано обратно в файл с помощью pathtofilest
Набор файлов - это что-то вроде селектора. Это набор "инструкций" (включений, исключений, шаблонов), позволяющий получить набор файлов.
Каждый раз, когда вы действительно что-то делаете с набором файлов (например, печать файлов, на которые он "ссылается"), фактический набор файлов вычисляется на основе "инструкций", содержащихся в наборе файлов.
Как отметил Джаян, возможно, стоит опубликовать окончательный результат в качестве ответа, поэтому вот упрощенная версия с ключевыми частями:
<fileset id="files" dir="${target.dir}"/>
<pathconvert property="before.files" pathsep=",">
<fileset refid="files"/>
</pathconvert>
<!-- Other Ant code changes the file-system. -->
<pathconvert property="after.files" pathsep=",">
<fileset refid="files"/>
</pathconvert>
<filelist id="before.files" files="${before.files}"/>
<filelist id="after.files" files="${after.files}"/>
<difference id="changed.files">
<filelist refid="before.files"/>
<filelist refid="after.files"/>
</difference>