所以...我有build.xml从基础加载属性文件。
然后,作为目标,我执行以下操作:
<var name="Var1" value="<property_from_**first**_loaded_property_file>" />
<var name="<property_from_**first**_loaded_property_file>" unset="true"/>
<property file="../<other directory>/<**second**_property_file>.properties" />
<var name="Var2" value="<property_from_**second**_loaded_property_file>"/>
这里的ceavat都是 相同的 属性名称。它无法改变。
所以,最后,我应该获得如下属性:
Var1=<property_from_**first**_loaded_property_file>
Var2=<property_from_**second**_loaded_property_file>
但相反 - 我得到的迹象表明,第一个属性文件中的属性(Var1)未被设置,然后从第二个属性文件中填充新值。 ant-contribs unset应该处理的事情:/ ......类似于:
Var1 = Var2
为什么我没有得到预期的结果?
答案 0 :(得分:1)
我认为问题在于,即使您将变量加载到反对贡献var
中,它仍然首先是property
,因此是不可变的。
我知道你无法更改属性文件,但是你对脚本本身有什么样的自由?您可以尝试利用范围规则和antcallback
任务来确定变量加载的范围。
例如,以下内容可以实现 - 尽管有点混乱 - 我认为你会追求的是:
<?xml version="1.0" encoding="utf-8"?>
<project name="Test" basedir=".">
<path id="ant.classpath">
<fileset dir="${basedir}">
<include name="ant-contrib_AP.jar"/>
</fileset>
</path>
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="ant.classpath"/>
<target name="test">
<antcallback target="load-more-prop" return="Var2"/>
<loadproperties>
<file file="prop1.properties"/>
</loadproperties>
<property name="Var1" value="${var}" />
<echo>${Var1}</echo>
<echo>${Var2}</echo>
</target>
<target name="load-more-prop">
<loadproperties>
<file file="prop2.properties"/>
</loadproperties>
<property name="Var2" value="${var}" />
</target>
</project>
在我的控制台中,我看到:
Buildfile: C:\Users\mfelzani\workspace-junk\junk\build.xml
test:
load-more-prop:
[echo] 7
[echo] 1
BUILD SUCCESSFUL
Total time: 905 milliseconds
分别与我在prop1.properties和prop2.properties中为var属性设置的值相匹配。
答案 1 :(得分:0)
你无法取消该值。
WRONG: <var name="<property_from_**first**_loaded_property_file>" unset="true"/>
您必须取消设置变量
CORRECT: <var name="Var1" unset="true"/>
答案 2 :(得分:0)
如果您需要覆盖某些现有属性或userproperty(通过ant命令行定义的那些属性 - 参数-Dkey = value),您可以使用Ant Plugin Flaka作为antcontrib的替代方案。
使用Flaka的let任务,您可以创建新属性或直接覆盖任何现有属性:
<project xmlns:fl="antlib:it.haefelinger.flaka">
<property name="foo" value="bar"/>
<!-- create new property -->
<fl:let>foo := 'baar'</fl:let>
<echo>$${foo} => ${foo}</echo>
<!--
overwrite existing property
notice the double '::' in foo ::= 'baz'
-->
<fl:let>foo ::= 'baz'</fl:let>
<echo>$${foo} => ${foo}</echo>
</project>