我有一个这样的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
这不是我想要的。我以为foo
会default_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"