我不知道如何在 Ant 属性没有被设置的情况下设置它(也就是说,它没有在属性文件中定义,应该自动默认)。
到目前为止,我只有以下代码:
<condition property="core.bin" value="../bin"> <isset property="core.bin"/> </condition>
但是,这似乎只有在 <property>标记中定义值时才有效。
<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 中的属性是不可变的。定义之后不能更改。
但是 蚂蚁贡献包提供了 variable任务。它的工作方式类似于属性,但值可以修改和取消设置。 可变任务文档的例子:
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>