如何为 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 文件以使 foo 属性在执行 shell 脚本时等于ant -Dfoo=${NONEXISTENT_VALUE} -buildfile build.xml default_value

-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设置好了,我认为它是一个空字符串。

在 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"

相关内容

  • 没有找到相关文章

最新更新