Ant-contrib:equals在for循环中不起作用

时间:2015-02-24 16:36:11

标签: ant stringtokenizer ant-contrib

我有一个build.properties文件:

a=test1
b=
c=test2

文件build.xml:

<property file="build.properties" />    

<for list="${a},${b},${c}" param="params">
    <sequential>
        <echo message="@{params}"></echo>
        <if>
            <equals arg1="@{params}" arg2=""/>
            <then><echo message="empty"/></then>
            <else><echo message="ok"/></else>
        </if>
    </sequential>
</for>

我获得:

[echo] test1
[echo] ok
[echo] test 2
[echo] ok

但我想:

[echo] test1
[echo] ok
[echo] empty
[echo] test 2
[echo] ok

发生了什么事?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

Ant-Contrib的for任务使用Java StringTokenizer类来标记参数列表。使用此类进行标记时,会跳过空标记,在您的情况下属性为b

一种解决方案是将空格添加到以逗号分隔的列表中,并修剪循环体中的标记:

<for list="${a}, ${b}, ${c}" param="params">
    <sequential>
        <propertyregex override="yes" property="trimmed.param" input="@{params}"
                regexp=" " replace="" global="true" defaultValue="@{params}" />
        <echo message="${trimmed.param}"/>
        <if>
            <equals arg1="${trimmed.param}" arg2=""/>   
            <then>
                <echo message="empty"/>
            </then>
            <else>
                <echo message="ok"/>
            </else>
        </if>
    </sequential>
</for>