我有一个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
发生了什么事?
感谢您的帮助。
答案 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>