Ваш пример задачи uptodate
близок - вам, вероятно, нужно настроить маппер и позаботиться об абсолютных и относительных путях.Возможно:
<uptodate property="tests.unnecessary">
<srcfiles dir="src" includes="**/*.java"/>
<mapper type="glob" from="*.java" to="../${build.dir}/classes/*.class"/>
</uptodate>
Обратите внимание на ..
в атрибуте mapper to=
- предположительно, build.dir
находится на том же уровне в иерархии каталогов, что и src
.Также обратите внимание, что скомпилированные классы имеют расширение .class
, а не «.classes».
После того, как вы запустите выше, вы можете использовать if/unless
атрибуты Ant target контролировать исполнение.Существует ряд подходов, наиболее базовым из которых может быть что-то вроде ниже.При запуске ant test
Ant определит, устарели ли какие-либо файлы, и пропустит очистку, компиляцию и проверку, если нет.Другой подход может состоять в том, чтобы вызвать серию целевых вызовов из одной цели, используя antcall
task .
<target name="check" depends="init">
<uptodate property="tests.unnecessary">
<srcfiles dir="src" includes="**/*.java"/>
<mapper type="glob" from="*.java" to="${build.dir}/classes/*.class"/>
</uptodate>
</target>
<target name="init">
<echo message="Running init" />
</target>
<target name="clean" depends="check" unless="tests.unnecessary">
<echo message="Running clean" />
</target>
<target name="compile" depends="clean" unless="tests.unnecessary">
<echo message="Running compile" />
</target>
<target name="test" depends="compile" unless="tests.unnecessary">
<echo message="Running test" />
</target>