如何检查一个number属性是否小于Apache Ant?
<property name="small" value="15"/>
<property name="big" value="156"/>
<fail message="small is less than big!">
<condition>
<lessthan val1="${small}" val2="${big}"/>
</condition>
</fail>
从我所看到的(我是新来的蚂蚁)你只能做<equal/>
?
您可以使用<scriptcondition>
(参见http://ant.apache.org/manual/Tasks/conditions.html)。
仔细阅读文档,因为它需要在ant中安装额外的jar依赖项。
条件可能如下所示(未测试):
<scriptcondition language="javascript">
var small = parseInt(project.getProperty("small"));
var big = parseInt(project.getProperty("big"));
self.setValue(small < big);
</scriptcondition>
下面是<isgreaterthan>
条件任务的用法,没有任何脚本:
<if>
<isgreaterthan arg1="100" arg2="10"/>
<then>
<echo>Number 100 is greater than number 10</echo>
</then>
</if>
arg1, arg2的值也可以是属性变量
注意:<isgreaterthan>
是Ant-Contrib可用的附加条件:
干杯JB Nizet,终于到了。
<!-- Test the Ant Version -->
<property name="burning-boots-web-build.required-ant-version" value="1.8.2"/>
<script language="javascript">
<![CDATA[
var current = project.getProperty("ant.version").match(/([0-9](.)?)+/)[0].replace(/./g,"");
var required = project.getProperty("burning-boots-web-build.required-ant-version").match(/([0-9](.)?)+/)[0].replace(/./g,"");
project.setProperty('ant.valid-version', current < required ? "false" : "true");
]]>
</script>
<fail message="This build requires Ant version ${burning-boots-web-build.required-ant-version}.">
<condition>
<isfalse value="${ant.valid-version}"/>
</condition>
</fail>
如果没有自定义任务或嵌入脚本,属性的"小于"比较是不可能的。
但是在大多数情况下,您可以通过将测试应用于值的来源而不是属性来逃避。在构建系统中,这些"源"通常是文件。对于文件,您可以将isfileselected
条件与选择器一起使用。大多数选择器接受when
属性,如less
、more
或equal
。
isfileselected
条件的手册中有一个示例
Ant插件Flaka提供了一个计算EL表达式的失败任务,例如:
<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">
<property name="small" value="15"/>
<property name="big" value="156"/>
<fl:fail message="small is less than big!" test="small lt big"/>
</project>
输出:BUILD FAILED
/home/rosebud/workspace/Ant/demo.xml:7: small is less than big!
参见Flaka手册了解更多详细信息
实际上,@GnanaPrakash提供的答案是不完整的。来自Ant Contrib文档:
这些条件适用于元素。不幸的是,它们不能在
任务,尽管任务的所有条件都可以与 还有 可用于任何 可以使用。
因此,islessthan
或isgreaterthan
元素必须像这样包装在bool
元素中:
<property name="small" value="15" />
<property name="big" value="156" />
<if>
<bool>
<islessthan arg1="${small}" arg2="${big}"/>
</bool>
<then>
<echo message="small is less than big!" />
</then>
<else>
<echo message="big is less than small!" />
</else>
</if>
如果你不这样做,你会得到一个错误:
if doesn't support the nested "islessthan" element.