Обновление целевого каталога с отсутствующими файлами и установка свойства aferwards

Я пытался заставить следующее работать в муравье, но не смог.

Сценарий, я хочу иметь возможность установить свойство для использования в проверке на основе, если какие-либо файлы из исходного каталога были скопированы в целевой каталог. Это должно быть верно для пустого целевого каталога, новых версий исходных файлов, а также для более новых файлов в исходном каталоге, которых нет в целевом каталоге.

Мой прототип файла build.xml выглядит следующим образом:

<?xml version="1.0"?>

<project name="build01" default="make.obj">
  <property name="src.dir" value="${basedir}/src"/>
  <property name="obj.dir" value="${basedir}/obj"/>
  <fileset id="src.files" dir="${src.dir}"/>

  <target name="make.obj" depends="check.make.obj" unless="make.obj.notneeded">
    <copy todir="${obj.dir}">
      <fileset refid="src.files"/>
    </copy>
    <property name="do.something.else" value="true"/>
  </target>

  <target name="check.make.obj">
  </target>

  <target name="make.final" depends="make.obj" unless="do.something.else">
    <exec executable="mkisofs">
      <arg value="-o"/>
      <arg value="foo.iso"/>
      <arg value="obj"/>
    </exec>
  </target>
</project>

Мой каталог сборки прототипа изначально выглядит следующим образом:

.
+ build.xml
+ obj
+ src
  + file01.txt
  + file02.txt

После первоначального вызова ant я хочу увидеть следующее:

.
+ build.xml
+ foo.iso
+ obj
| + file01.txt
| + file02.txt
+ src
  + file01.txt
  + file02.txt

Если я снова запускаю ant без внесения каких-либо изменений, я не хочу, чтобы ant обновлял каталог obj или переделывал foo.iso.

Если я обновлю src/file01.txt, src/file02.txt или добавлю файл (например, src/file03.txt), я хочу, чтобы ant обновил каталог obj, и я хочу, чтобы ant переделал foo.iso.

Я пробовал разные задачи, но не могу заставить что-то работать правильно.

Какие-либо предложения?

2 ответа

Заменить это:

<property name="do.something.else" value="true"/>

с этим:

<uptodate targetfile="foo.iso" property="do.something.else">
    <srcfiles dir="${obj.dir}"/>
</uptodate>

<uptodate> устанавливает свойство, если цель существует и новее, чем источник (и).

Чтобы уточнить, следующее всегда возвращает истину

  <target name="make.final">
    <echo message="Inside make.final"/>
    <uptodate property="copy.notneeded">
      <srcfiles dir="src" includes="file01.txt"/>
      <mapper type="glob" from="src/*" to="obj/*"/>
    </uptodate>
    <echo message="copy.notneeded=${copy.notneeded}"/>
  </target>

Неважно, существует каталог obj или нет, или все файлы из src уже существуют в obj.

Я также попытался заменить "glob" на "regex". Это тоже не работает.

Другие вопросы по тегам