只有在未设置的情况下才能设置Ant属性
我不知道如何设置一个Ant属性,条件是它尚未设置(即它没有在属性文件中定义,应该自动默认)。
到目前为止,我只有以下代码:
<condition property="core.bin" value="../bin"> <isset property="core.bin"/> </condition>
但是,只有在<property>
标签中定义了这个值,这似乎才起作用。
有谁知道如何有条件地设置一个属性第一次,如果它目前未设置?
你可以简单地使用property-task来设置属性。 如果属性已经设置,则值不变,因为属性是不可变的。
但是你也可以在你的情况中包含“不”
<condition property="core.bin" value="../bin"> <not> <isset property="core.bin"/> </not> </condition>
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中的variables任务 。
最简单的方法来做你想做的事情:
<if> <not> <isset property="your.property"/> </not> <then> <property name="your.property" value="your.value"/> </then> </if>
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 -->
在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>