Есть несколько способов сделать это:
Использование условий на целевом объекте
Цели могут содержать if
и unless
условий. Цель будет выполняться в зависимости от того, установлено свойство или нет. (Не установлено на true , просто установлено). Это обычный способ узнать, нужно ли вам что-то делать или нет:
<target name="deleted.after.compilation"
if="delete.compiled.dir"
depends="jar">
<delete dir="${compilation-dir}" />
<echo> Deleting Compiled Directory Classes </echo>
</target>
Вы можете установить свойство в командной строке:
$ ant -Ddelete.compiled.dir all
Примечание: я использую точки в качестве разделителей для имен свойств и целей. Также обратите внимание, что я зависит только от цели jar
, поскольку jar
также зависит от compile
, нет необходимости иметь их обоих.
Используйте условные предложения Ant 1.9.1
Начиная с Ant 1.9.1, Ant имеет условных атрибутов , которые можно добавлять к задачам. Вам необходимо добавить объявление пространства имен в вашу <project>
сущность:
<project ...
xmlns:if="ant:if"
xmlns:unless="ant:unless">
<target name="deleted.after.compilation"
depends="jar">
<delete dir="${compilation-dir}" if:true="${delete.compiled.dir}"/>
<echo if:true="${delete.compiled.dir}"> Deleting Compiled Directory Classes </echo>
</target>
Используйте Ant-Contrib's If Statement
Ха-ха, эта дурацкая библиотека Ant-Contrib. Никто не знает, кто его поддерживает, и его не трогали годами, но многие люди так сильно зависят от него.
<project ...>
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${ivy.dir}/antcontrib">
<include name="ant-contrib*.jar"/>
</fileset>
</classpath>
</taskdef>
<target name="deleted.after.compilation"
depends="jar">
<if>
<istrue value="${delete.compiled.dir}"/>
<then>
<delete dir="${compilation-dir}"/>
<echo>Deleting Compiled Directory Classes </echo>
</then?
</if>
</target>
Вы можете понять, почему Ant-Contrib популярен. В нем много силы, и мы все это знаем. Кроме того, если кто-то еще использует Ant 1.8 или 1.7, это все равно будет работать.