Обновление целевого каталога с отсутствующими файлами и установка свойства 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". Это тоже не работает.