如何设置一个 Ant 属性只有当它是取消设置

我不知道如何在 Ant 属性没有被设置的情况下设置它(也就是说,它没有在属性文件中定义,应该自动默认)。

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

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

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

有人知道如何第一次有条件地设置当前未设置的属性吗?

83891 次浏览

只需使用 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 中的属性是不可变的。定义之后不能更改。

但是 蚂蚁贡献包提供了 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 -->

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

<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中使用“ else”来实现您的确切目的。

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>