我无法弄清楚如何在未设置Ant属性的情况下设置Ant属性(即,该属性未在属性文件中定义,应自动默认设置)。
到目前为止,我只有以下代码:
<condition property="core.bin" value="../bin">
<isset property="core.bin"/>
</condition>
但这仅在值在<property>
标签中定义时才起作用。
有谁知道如果当前未设置属性,则该如何首次有条件地设置它?
Answers:
Ant默认情况下会这样做;如果属性已经设置;再次设置无效:
<project name="demo" default="demo">
<target name="demo" >
<property name="aProperty" value="foo" />
<property name="aProperty" value="bar" /> <!-- already defined; no effect -->
<echo message="Property value is '${aProperty}'" /> <!-- Displays 'foo' -->
</target>
</project>
给
/c/scratch> ant -f build.xml
Buildfile: build.xml
demo:
[echo] Property value is '${aProperty}'
BUILD SUCCESSFUL
Total time: 0 seconds
/c/scratch> ant -f build.xml
Buildfile: build.xml
demo:
[echo] Property value is 'foo'
BUILD SUCCESSFUL
无法重新定义属性;为此,您需要使用ant-contrib中的variable task之类的东西。
支持在https://ant.apache.org/manual/Tasks/condition.html中使用'else'以达到您的确切目的。
其他
The value to set the property to if the condition evaluates to false. By default the property will remain unset. Since Apache Ant 1.6.3
因此更改为:
<condition property="core.bin" else="../bin">
<isset property="core.bin"/>
</condition>
Ant中的属性是不可变的。定义后,它们将无法更改。
但是Ant Contrib软件包提供了variable
任务。它像一个属性一样工作,但是可以修改和取消设置值。从可变任务文档中摘录:
<var name="x" value="6"/>
<if>
<equals arg1="${x}" arg2="6" />
<then>
<var name="x" value="12"/>
</then>
</if>
<echo>${x}</echo> <!-- will print 12 -->