嵌套一个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>