如何设置一个Ant属性,如果它未被设置
问题描述:
我不知道如何设置一个Ant属性,条件是它尚未设置(即它没有在属性文件中定义,并应该自动默认) 。如何设置一个Ant属性,如果它未被设置
到目前为止,我只有下面的代码:
<condition property="core.bin" value="../bin">
<isset property="core.bin"/>
</condition>
但这似乎只如果该值在<property>
标签定义工作。
有谁知道如何有条件地设置属性第一次,如果它目前未设置?
答
您只需使用属性任务设置属性即可。如果该属性已设置,则该值不变,因为属性是不可变的。
但你也可以包括“而不是”你的条件:
<condition property="core.bin" value="../bin">
<not>
<isset property="core.bin"/>
</not>
</condition>
答
蚂蚁在默认情况下做到这一点;如果该物业已经设定;再设置它没有任何效果:
<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。
答
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 -->
答
最简单的方式做你想要的:
<if>
<not>
<isset property="your.property"/>
</not>
<then>
<property name="your.property" value="your.value"/>
</then>
</if>
答
有支持使用“其他”中的: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>
这是不正确的。以下示例中的第一个回显将打印“Ha1”,第二个回显将打印“Ha2”:\t \t \t \t \t \t \t \t –
Denis
2015-09-22 14:54:12