如何为未设置或等于Ant中的空字符串的属性提供默认值?

时间:2019-01-15 10:34:10

标签: shell ant

我有一个build.xml文件,如下所示:

<project basedir="." default="test">
    <target name="test">
        <condition property="foo" value="${foo}" else="default_value">
            <and>
                <not>
                    <equals arg1="${foo}" arg2=""/>
                </not>
                <isset property="foo" />
            </and>
        </condition>
        <echo message="foo: ${foo}"/>
    </target>
</project>

执行build.xml shell脚本时,如何更改我的foo文件以使default_value属性等于ant -Dfoo=${NONEXISTENT_VALUE} -buildfile build.xml

-Dfoo=${NONEXISTENT_VALUE}将属性传递给ant

NONEXISTENT_VALUE是未定义的环境变量。 我的意思是echo ${NON_EXIST_VALUE}返回空行。

ant -Dfoo=${NONEXISTENT_VALUE} -buildfile build.xml产生以下结果:

test:
     [echo] foo:

BUILD SUCCESSFUL
Total time: 0 seconds

这不是我想要的东西。我期望foodefault_value。因为foo已设置,所以我认为它是一个空字符串。

1 个答案:

答案 0 :(得分:0)

在Ant中,在命令行中定义的属性将始终优先于脚本中的任何内容,因此,如果在运行这样的命令时定义foo,则总是会遇到问题。我建议使用property任务的environment属性为环境变量设置前缀,然后在脚本中引用相关变量。这是完成此操作的示例:

<target name="test">
    <property environment="env" />

    <condition property="foo" value="${env.USER}" else="default_value">
        <isset property="env.USER" />
    </condition>

    <condition property="bar" value="${env.NONEXISTANT}" else="default_value">
        <isset property="env.NONEXISTANT" />
    </condition>

    <echo message="foo: ${foo}"/>

    <echo message="bar: ${bar}"/>
</target>

运行以上文本,您将看到foo设置为用户名,而bar设置为“ default_value”