Ant属性在Windows中是可变的,但在Unix中不是可变的?
我正在使用Ant进行自动构建过程 一个目标是检查变量是否已设置,如果未设置,则将其设置为空字符串并将其作为环境键导出到可执行文件。我有多个属性文件,它们要么定义了Ant属性在Windows中是可变的,但在Unix中不是可变的?,ant,properties,immutability,unset,ant-contrib,Ant,Properties,Immutability,Unset,Ant Contrib,我正在使用Ant进行自动构建过程 一个目标是检查变量是否已设置,如果未设置,则将其设置为空字符串并将其作为环境键导出到可执行文件。我有多个属性文件,它们要么定义了bla属性,要么没有定义属性。因此,我遍历我的文件列表并执行以下操作: <for list="${propertyfiles}" param="mypropertyfile"> <var name="bla" unset="true" /> <property file="@{myprope
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>
确保我可以使用bla
属性。我认为使用属性的不变性是明智的。所以
<property name="bla" value=""/>
设置未在“我的属性文件”中定义的属性。如果已定义,则理论上无法覆盖初始属性值
现在奇怪的是:在我的unix系统上,这种方法就像一种魅力,在windows上它不起作用定义的属性值被空字符串覆盖。两台机器都安装了ant 1.8
我知道我可以使用
和
属性标志以另一种方式解决问题,但我只是想知道这是怎么可能的。如果你能帮助我理解这种不一致的行为,那就太好了 变量和unset是的一部分,因为您没有提到我用1.0b2和1.0b3测试的ant contrib版本。虽然这只是一个数据点,但我认为您可以从假设结果的真实性开始,即ant 1.8中windows和*nix上的unset=“true”
允许您重新分配以前设置过的不可变属性的值(无论是在for循环内部还是外部),否则不会产生任何效果
因此,在未设置的调用和将属性设置为默认值之间存在一个问题,即在windows上,您的属性未按预期进行设置。因此,我将研究两个可能的原因:
\“
转义任何异常字符“”
${bla}
显示您的属性实际上是从文件中正确加载的,那么我将首先将您的代码移出for循环,看看它是否适用于单个情况。我的测试代码:
<project name="propertyMutator" default="mutator">
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<echo>Running ${ant.version}</echo>
<target name="mutator">
<for list="one,two,three" param="mypropertyfile">
<sequential>
<var name="bla" unset="true" />
<property file="@{mypropertyfile}.properties" />
<echo message="Bla before default is: ${bla}"/>
<property name="bla" value="default value"/>
<echo message="Bla after default is: ${bla}"/>
</sequential>
</for>
</target>
</project>
印刷品
Buildfile: C:\workspace\proj\propertyMutator.xml
[echo] Running Apache Ant(TM) version 1.8.3 compiled on February 26 2012
mutator:
[echo] Bla before default is: ${some.var}
[echo] Bla after default is: ${some.var}
[echo] Bla before default is: ${bla}
[echo] Bla after default is: default value
[echo] Bla before default is: hello3
[echo] Bla after default is: hello3
在linux和windows上。变量和unset是测试的一部分,因为您没有提到我用1.0b2和1.0b3测试的ant contrib版本。虽然这只是一个数据点,但我认为您可以从假设结果的真实性开始,即
unset=“true”“
在ant 1.8中的windows和*nix上,如果以前设置过其他不可变属性的值(无论是在for循环内部还是外部),则允许您重新分配该属性的值,否则不会产生任何效果
因此,在未设置的调用和将属性设置为默认值之间存在一个问题,即在windows上,您的属性未按预期进行设置。因此,我将研究两个可能的原因:
\“
转义任何异常字符“”
${bla}
显示您的属性实际上是从文件中正确加载的,那么我将首先将您的代码移出for循环,看看它是否适用于单个情况。我的测试代码:
<project name="propertyMutator" default="mutator">
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<echo>Running ${ant.version}</echo>
<target name="mutator">
<for list="one,two,three" param="mypropertyfile">
<sequential>
<var name="bla" unset="true" />
<property file="@{mypropertyfile}.properties" />
<echo message="Bla before default is: ${bla}"/>
<property name="bla" value="default value"/>
<echo message="Bla after default is: ${bla}"/>
</sequential>
</for>
</target>
</project>
印刷品
Buildfile: C:\workspace\proj\propertyMutator.xml
[echo] Running Apache Ant(TM) version 1.8.3 compiled on February 26 2012
mutator:
[echo] Bla before default is: ${some.var}
[echo] Bla after default is: ${some.var}
[echo] Bla before default is: ${bla}
[echo] Bla after default is: default value
[echo] Bla before default is: hello3
[echo] Bla after default is: hello3
在linux和windows上。您是否验证了它是否正确加载属性文件并在windows系统上设置了值?在您尝试将
bla
设置为空字符串之前,
显示的bla
内容是什么?我发布的答案中的方法学有什么进展吗?会的如果您能让我们知道原因,那就太好了。您是否验证了它是否正确加载属性文件并在Windows系统上设置了值?在您尝试将bla
设置为空字符串之前,
显示的bla
内容是什么?您在回答中的方法学有什么进展吗我发帖了?如果你能告诉我们原因,那就太好了。
Buildfile: C:\workspace\proj\propertyMutator.xml
[echo] Running Apache Ant(TM) version 1.8.3 compiled on February 26 2012
mutator:
[echo] Bla before default is: ${some.var}
[echo] Bla after default is: ${some.var}
[echo] Bla before default is: ${bla}
[echo] Bla after default is: default value
[echo] Bla before default is: hello3
[echo] Bla after default is: hello3