如果在macrodef中,则为Ant条件

bha*_*ral 12 ant

在蚂蚁中,我有一个macrodef.

假设我必须使用这个macrodef,并且如果属性special.property存在并且为true,我想在所述macrodef中运行一个项目,我该怎么办?

我现在有

<macrodef name="someName">
    <sequential>
        <someMacroDefThatSetsTheProerty  />
        <some:thingHereThatDependsOn if="special.property" />
    <sequential>
</macrodef>
Run Code Online (Sandbox Code Playgroud)

哪个不起作用 - some:thingHereThatDependsOn没有"if"属性,我无法添加一个.

antcontrib不可用.

有了目标,我可以给目标一个"if",我可以用macrodef做什么?

Dav*_* W. 16

在Ant 1.9.1及更高版本中,现在有了一个新的实现ifunless 属性.这可能就是你想到的.

首先,您需要将它们放入命名空间.将它们添加到<project>标题中:

<project name="myproject" basedir="." default="package"
    xmlns:if="ant:if"
    xmlns:unless="ant:unless">
Run Code Online (Sandbox Code Playgroud)

现在,您可以将它们添加到几乎任何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>
Run Code Online (Sandbox Code Playgroud)


Mar*_*nor 7

只有当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"/>
Run Code Online (Sandbox Code Playgroud)

  • 这不再准确.Ant 1.9.1有新的`if`和`unless`属性. (5认同)