有几种方法可以做到这一点:
在目标实体上使用条件
目标可以包含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 的 If 语句
哈哈,那个古怪的 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,这也仍然可用。