嵌套一个islessthan,而不是在if任务中-Ant

嵌套一个islessthan,而不是在if任务中-Ant,ant,ant-contrib,Ant,Ant Contrib,我有一个ant任务,如下所示: <target name="mathWala" description="Some sample math operations."> <if> <islessthan arg1="${op1}" arg2="${limit}"/> <then> <echo>${op1} is less than ${limi

我有一个
ant
任务,如下所示:

<target name="mathWala" description="Some sample math operations.">
        <if>
            <islessthan arg1="${op1}" arg2="${limit}"/>
            <then>
                <echo>${op1} is less than ${limit}</echo>
                <antcall target="adder"></antcall>
            </then>
        </if>
    </target>

    <target name="adder">
        <math result="result" operand1="${op1}" operation="+" operand2="1" datatype="int"/>
        <echo>result = ${result}</echo>
    </target>

${op1}小于${limit}
结果=${result}
当我运行上述任务时,得到的错误是:
if不支持嵌套的“islessthan”元素。


我可以同时使用
语句吗?我查看了文档,没有发现任何其他建议。

这是最新版本1.0b3的antcontrib中的几个错误之一(其他奇怪之处请参见),但是
将与版本antcontrib 1.0b2一起使用
或者,您可以使用内置javascript引擎的macrodef(包含在jdk=>1.6.0_06中),而不是使用target+antcall,这被认为是一种不好的做法。
下面是一些经过修改的代码片段:


//注意=>使用不带“”的属性@{when}!
if(eval(@{when})){
tmp=0;
开关(“@{operation}”){
格“+”:
tmp=parseInt(“@{operator1}”)+parseInt(“@{operator2}”);
打破
案例“-”:
tmp=parseInt(“@{operator1}”)-parseInt(“@{operator2}”);
打破
案例“*”:
tmp=parseInt(“@{operator1}”)*parseInt(“@{operator2}”);
打破
案例“/:
tmp=parseInt(“@{operator1}”)/parseInt(“@{operator2}”);
打破
}
project.setProperty(“@{result}”,tmp);
}否则{
println(“条件:@{when}false!”);
}
故意使用不同的数学运算,如-、+、*,/而不是使用
eval(…)
来限制macrodef提供的运算类型。

如果任务不是标准的ANT功能。ANT目标的有条件执行可按如下方式完成:

<project name="demo" default="build">

  <property name="opt1"  value="20"/>
  <property name="limit" value="50"/>

  <condition property="is.less.than">
    <scriptcondition language="javascript"><![CDATA[
    self.setValue(Number(project.getProperty("opt1")) < Number(project.getProperty("limit")));
    ]]></scriptcondition>
  </condition>

  <target name="build" if="is.less.than">
    <echo message="${opt1} is less than ${limit}"/>
  </target>

</project>

<project name="demo" default="build">

  <property name="opt1"  value="20"/>
  <property name="limit" value="50"/>

  <condition property="is.less.than">
    <scriptcondition language="javascript"><![CDATA[
    self.setValue(Number(project.getProperty("opt1")) < Number(project.getProperty("limit")));
    ]]></scriptcondition>
  </condition>

  <target name="build" if="is.less.than">
    <echo message="${opt1} is less than ${limit}"/>
  </target>

</project>