如何在未设置的情况下设置Ant属性

时间:2009-05-06 09:39:14

标签: ant

我无法弄清楚如何在未设置Ant属性的情况下设置它(即它没有在属性文件中定义,并且应该自动默认)。

到目前为止,我只有以下代码:

<condition property="core.bin" value="../bin">
    <isset property="core.bin"/>
</condition>

但是,只有在<property>标记中定义了值时,这似乎才有效。

如果当前未设置属性,是否有人知道如何首次有条件地设置属性?

5 个答案:

答案 0 :(得分:112)

您只需使用property-task设置属性即可。如果已设置该属性,则该值不会更改,因为属性是不可变的。

但你也可以在你的情况中加入'not':

<condition property="core.bin" value="../bin">
   <not>  
      <isset property="core.bin"/>
   </not>
</condition>

答案 1 :(得分:62)

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

属性无法重新定义;要做到这一点,你需要使用像variable task from ant-contrib

这样的东西

答案 2 :(得分:6)

做你想做的最简单的方法:

<if>
    <not>
        <isset property="your.property"/>
    </not>
    <then>
        <property name="your.property" value="your.value"/>
    </then>
</if>

答案 3 :(得分:3)

支持使用&#39; else&#39;在https://ant.apache.org/manual/Tasks/condition.html内,为您的目的服务。

其他

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>

答案 4 :(得分:2)

Ant中的属性是不可变的。定义后,它们无法更改。

但是Ant Contrib包提供了variable任务。它的作用类似于属性,但值可以修改和取消设置。 例如variable task documentation

    <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 -->