正如Ian Roberts已经提到的,您需要 Ant-Contrib jar,然后将其设置<taskdef/>
为指向该 jar。我强烈建议将其放入您的项目中并将其检入您的版本控制系统中。这样,当有人签出您的项目时,他们已经安装了 Ant- Contib.jar。
我的标准是将构建所需的所有可选jar(而不是编译所需的jar)放在目录${basedir}/antlib
中,然后将每个可选jar放在它自己的目录中,这样我就会ant-contrib-1.0b3.jar
放入${basedir}/antlib/antcontrib
.
然后我以这种方式定义任务:
<property name="antlib.dir" value="${basedir}/antlib"/>
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${antlib.dir}/antcontrib"/>
</classpath>
</taskdef>
这样,如果您将 jar 文件更新为 Ant-Contrib jar 的新版本,您只需将其插入目录即可。您不必更新build.xml
.
另请注意,我使用net/sf/antcontrib/antlib.xml
而不是net/sf/antcontrib/antcontrib.properties
. XML文件是您应该使用的。任务页面上的说明与安装说明下主页上的说明不同。原因是 XML 文件具有正确的<for>
任务定义,而属性文件没有。
if
但是,unless
在 Ant 1.9.1 中还有另一种方法,不需要可选的 jar 文件。这些是新的If 和 unless 实体属性。
这些可以放在所有任务或子实体中,并且通常可以替换 Ant-Contrib 的if/else
东西:
<target name="move">
<available file="${output.dir}" type="dir"
property="output.dir.exists"/>
<echo message"Directory exists"
if:true="output.dir.exists"/>
<move file="${output.dir}" tofile="${output.dir}_1"
if:true="output.dir.exists"/>
<property name="newdirectory" value="${dest}"
if:true="output.dir.exists"/>
<echo message="Directory does not exists"
unless:true="output.dir.exists"/>
<move file="${newdirectory}" todir="C:\reports" />
</target>
不像你的例子那么干净。但是,我会改为在目标名称上使用if=
and参数:unless=
<target name="move.test">
<available file="${output.dir}" type="dir"
property="output.dir.exists"/>
</target>
<target name="move"
depends="move.test, move.exists, move.does.not exists">
<move file="${newdirectory}" todir="C:\reports" />
</target>
<target name="move.exists"
if="output.dir.exists">
<echo message="Directory exists" />
<move file="${output.dir}" tofile="${output.dir}_1"/>
<property name="newdirectory" value="${dest}"/>
</move.exists/>
<target name="move.does.not.exists"
unless="output.dir.exists"/>
<echo message="Directory does not exist" />
</target>
如果你没有回应所有的东西,结构会更干净一点:
<target name="move.test">
<available file="${output.dir}" type="dir"
property="output.dir.exists"/>
</target>
<target name="move"
depends="move.test, backup">
<move file="${newdirectory}" todir="C:\reports" />
</target>
<target name="backup"
if="output.dir.exists">
<move file="${output.dir}" tofile="${output.dir}_1"/>
<property name="newdirectory" value="${dest}"/>
</move.exists/>