我有一个文件 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
发生什么事了?
感谢您的帮助。
最佳答案
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>
关于 Ant 贡献 : equals doesn't work in for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28701236/