我有一个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
这不是我想要的东西。我期望foo
是default_value
。因为foo
已设置,所以我认为它是一个空字符串。
答案 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”