我目前正在从Ant中的XML文件加载属性。但是,我想在for循环中执行当前的ant任务,同时每次为同一组属性加载新的XML属性文件。
我知道ant-contrib的var任务的存在,它允许我覆盖属性。但是,我不确定如何将其与XML文件中的加载属性相结合。我首先考虑迭代所有属性,然后使用propertyregex任务将它们设置为新值。不幸的是,当我开始编写代码时,我意识到我还不知道如何实际加载属性值,因为它们无法覆盖以前设置的属性。 (好吧,他们可以使用var任务,但据我所知,这不能用于从XML文件加载。)
有什么想法吗?我理想地寻找的是一个叫做
的任务<xmlvars file="myxmlpropertyfile.xml"/>
就像
一样起作用<xmlproperty file="myxmlpropertyfile.xml"/>
,但它会覆盖变量。
答案 0 :(得分:2)
您可以对<xmlproperty>
任务执行的操作之一是为每个属性添加特定值。为什么不简单地使用参数名称作为前缀?
否则,您可以使用<echoproperties>
任务取消设置所有属性,然后循环执行<for>
任务的下一次迭代。
这样的东西,但是没有经过测试:
<for param="my.directory">
<fileset dir="${some.directory}"/>
<sequential>
<xmlproperty file="@{my.directory}/myxmlpropertyfile.xml"
prefix="foo-fighters"/>
<blah, blah, blah/>
<for param="reset.var">
<echoproperty prefix=foo-fighters"/>
<sequential>
<var name="@{reset.var}"
unset="true"/>
</sequential>
</for>
</sequential>
</for>
基本上,您使用外部<for>
循环遍历您的目录,并使用<xmlproperty>
来设置属性名称。 <blah blah blah/>
意味着做你想做的事。然后,在进入外部<for>
循环的下一次迭代之前,执行内部 <for>
循环,该循环将取消设置先前在{{1}中设置的所有变量任务。
诀窍是使用一个变量前缀来保证很容易找到变量名。因此<xmlproperty>
。
答案 1 :(得分:0)
看起来我应该能够通过使用var task的unset属性来实现这一点。会报告回来......