在ant中,我有一个macrodef。
假设我必须使用这个macrodef,并且如果属性special.property
存在并且为true,那么在所述macrodef中有一个项目我想运行,我该怎么办?
我目前有
<macrodef name="someName">
<sequential>
<someMacroDefThatSetsTheProerty />
<some:thingHereThatDependsOn if="special.property" />
<sequential>
</macrodef>
这不起作用-一些:thingHereThatDependsOn没有"if"属性,我无法添加它。
antcontrib不可用。
有了目标,我可以给目标一个"if",我能用macrodef做什么?
在Ant 1.9.1及更高版本中,现在有了if
和unless
属性的新实现。这可能就是你的想法。
首先,您需要将它们放入命名空间中。将它们添加到您的<project>
标头:
<project name="myproject" basedir="." default="package"
xmlns:if="ant:if"
xmlns:unless="ant:unless">
现在,您可以将它们添加到几乎任何Ant任务或子实体中:
<!-- Copy over files from special directory, but only if it exists -->
<available property="special.dir.available"
file="${special.dir} type="dir"/>
<copy todir="${target.dir}>
<fileset dir="${special.dir}" if:true="special.dir.available"/>
<fileset dir="${other.dir}"/>
</copy>
<!-- FTP files over to host, but only if it's on line-->
<condition property="ftp.available">
<isreachable host="${ftp.host}"/>
</condition>
<ftp server="${ftp.host}"
userid="${userid}"
passowrd="${password}"
if:true="ftp.available">
<fileset dir=".../>
</ftp>
只有当ANT"thingHereThatDependsOn"任务支持"if"属性时,这才有可能。
如上所述,ANT中的条件执行通常只适用于目标。
<target name="doSomething" if="allowed.to.do.something">
..
..
</target>
<target name="doSomethingElse" unless="allowed.to.do.something">
..
..
</target>
<target name="go" depends="doSomething,doSomethingElse"/>