只有在未设置的情况下才能设置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>