我有一个文件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发生什么事了?
谢谢你的帮助。
发布于 2015-02-25 01:21:47
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>https://stackoverflow.com/questions/28701236
复制相似问题