Apache Ant小于

时间:2011-09-30 21:13:23

标签: ant

如何检查数字属性是否小于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>

从我所看到的(我是Ant新手)你只能做<equal/>

6 个答案:

答案 0 :(得分:4)

您可以使用<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>

答案 1 :(得分:3)

以下是<isgreaterthan>条件任务的用法,不包含任何脚本:

<if>
    <isgreaterthan arg1="100" arg2="10"/>
    <then>
        <echo>Number 100 is greater than number 10</echo>
    </then>
</if>

此外,arg1,arg2值可以是属性变量。

注意:<isgreaterthan>是Ant-Contrib提供的附加条件:

http://ant-contrib.sourceforge.net/tasks/tasks/more_conditions.html

答案 2 :(得分:2)

干杯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>

答案 3 :(得分:0)

如果没有自定义任务或嵌入式脚本,则无法使用属性的“小于”比较。

但在大多数情况下,您可以通过将测试应用于属性而不是值的来源来逃避。在构建系统中,这些“源”通常是文件。在文件上,您可以使用isfileselected conditionselector。大多数选择者接受whenlessmoreequal属性。

isfileselected条件的手册显示了一个示例。

答案 4 :(得分:0)

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 manual

答案 5 :(得分:0)

实际上,@ GnanaPrakash提供的答案是不完整的。 来自Ant Contrib文档:

  

这些条件适合在元素中使用。不幸的是,它们不能用于&lt; condition&gt;任务,尽管该任务的所有条件都可以与&lt; bool&gt;一起使用和&lt; bool&gt;可用于&lt; condition&gt;的任何地方可以使用。

因此,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.