Ant 贡献 : equals doesn't work in for loop

标签 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

发生什么事了?

感谢您的帮助。

最佳答案

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/

相关文章:

java - 如何使用 Java 10 及更高版本跳过 ant 中的 javah 任务?

java - 从 RandomAccessFile 中读取数据产生不正确的结果 - Java

java - 跳过插入 csv 文件的第一行

java - StringTokenizer countTokens 可以为零吗?

ant - 如何使用 "if-else"模拟 "condition"逻辑?

java - 在 Java 构建过程中更改常量的最佳方法

java - 如何在不修改源代码的情况下禁用 "warning: [unchecked] unchecked conversion"

windows - 从 Jenkins 在远程服务器(windows)上运行批处理脚本

Ant @变量未解析

java - 如何排除 ANT "exec"命令行错误消息?