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


72

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

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

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

但这仅在值在<property>标签中定义时才起作用。

有谁知道如果当前未设置属性,则该如何首次有条件地设置它?

Answers:


116

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

但是您也可以在条件中包括“ not”:

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

64

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之类的东西。


这不是真的 在以下示例中,第一个回显将打印“ Ha1”,第二个回显将打印“ Ha2”:<if test =“ $ {deploy.env =='PROD'}”> <属性名称=“ deploy.root.dir “ value =” Ha1“ /> <echo message =”将deploy.root.dir设置为:$ {deploy.root.dir}“ /> </ if> <属性名称=” deploy.root.dir“ value =” Ha2“ /> <echo message =”将deploy.root.dir设置为:$ {deploy.root.dir}“ />
Denis

2
我想你错了。这在Ant文档中非常清楚。我无法运行您的示例(If任务定义在哪里?看起来不像ant-contribs的语法),但是运行<project> <property name =“ p” value =“ 1” /> <property name = “p”的值=“2” /> <回声消息=“$ {p}” /> </项目>会给第一个值,1。它可以通过编写定制任务做此,而是仅由修改Ant的项目模型直接。
安迪·林奇

6

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

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

4

支持在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>

2

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 -->
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.