我正在使用 Ant 进行自动化构建过程。
一个目标是检查是否已经设置了变量,如果没有,将其设置为空字符串并将其作为环境键导出到可执行文件。我有多个属性文件,这些文件要么定义了bla
属性,要么没有定义。所以我遍历我的文件列表并执行以下操作:
<for list="${propertyfiles}" param="mypropertyfile">
<var name="bla" unset="true" />
<property file="@{mypropertyfile}.properties" />
<property name="bla" value=""/>
... use the "bla" property for something ...
</for>
解释这些行:
<var name="bla" unset="true" />
是确保没有从先前的循环传递中使用任何值。我包括具有或未定义该bla
属性的属性文件。
<property file="@{mypropertyfile}.properties" />
以确保我可以使用该bla
物业。我认为使用属性的不变性会很聪明。所以
<property name="bla" value=""/>
设置属性以防它未在我的属性文件中定义。如果它已经被定义,理论上,初始属性值不能被覆盖。
现在奇怪的是:在我的 unix 系统上,这种方法就像一种魅力,在 Windows上却没有;定义的属性值被空字符串覆盖。两台机器都安装了ant 1.8。
我知道我可以使用<if>
和<isset>
属性标志以另一种方式解决问题,但我只是想知道这怎么可能。如果您能帮助我理解这种不一致的行为,那就太好了。