宏定义中的Ant条件if

宏定义中的Ant条件if,ant,Ant,在ant中,我有一个宏定义 假设我必须使用这个macrodef,并且如果属性special.property存在并且为true,那么在所述macrodef中有一项我想要运行,我该怎么办 我现在有 <macrodef name="someName"> <sequential> <someMacroDefThatSetsTheProerty /> <some:thingHereThatDependsOn if="sp

在ant中,我有一个宏定义

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

我现在有

<macrodef name="someName">
    <sequential>
        <someMacroDefThatSetsTheProerty  />
        <some:thingHereThatDependsOn if="special.property" />
    <sequential>
</macrodef>

这不起作用——dependson的some:thinghere没有“if”属性,我不能添加一个

antcontrib不可用


对于目标,我可以给目标一个“如果”,我可以用宏定义做什么?

这只有在ANT“ThingherethatDependenson”任务支持“如果”属性时才可能

如上所述,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"/>

..
..
..
..

在Ant 1.9.1及更高版本中,现在有了
if
除非的新实现。这可能就是你想的

首先,您需要将它们放入您的命名空间中。将它们添加到您的
标题中:

<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中的条件执行在任务级别不起作用,它适用于目标。也许可以提供更多关于您尝试做什么的细节。为什么不能使用ant contrib?(或者像BeanShell这样的Ant中的脚本语言。)Ant不用于目标中的条件逻辑;只针对目标本身。Ant contrib的引入是为了解决这个问题。AntContrib是一个开源jar。为什么你不能提供?说你不能使用ant contrib感觉有点像说“我需要解决这个问题,但我的代码中不允许使用任何空格”@MarkO'Connor说实话,我只是想知道这是否可能。@JeanneBoyarsky仅仅因为某些东西是“开源”并不意味着“它可以被使用”。在我的特殊情况下,是的,我可以使用ant contrib。这是一个关于“是否可能”的问题,我想它的意思是“不可能”。这不再准确。Ant 1.9.1具有新的
if
except
属性。我使用的是Ant版本1.9.2。在这种情况下,“if:true”不调用宏定义。它不起作用。