有几种方法可以做到这一点:
在目标实体上使用条件
目标可以包含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 具有可以添加到任务的 conditional attributes。您需要在 <project> 实体中添加 Namepsace 声明:
<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 库。没有人知道是谁在维护它,而且很多年都没有动过它,但是很多人非常依赖它。
<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,这仍然可以工作。