我目前正在从Ant中的
XML文件加载属性.但是,我想在for循环中执行当前的ant任务,同时每次为同一组属性加载新的XML属性文件.
我知道ant-contrib的var任务的存在,它允许我覆盖属性.但是,我不确定如何将其与XML文件中的加载属性相结合.我首先考虑迭代所有属性,然后使用propertyregex任务将它们设置为新值.不幸的是,当我开始编写代码时,我意识到我还不知道如何实际加载属性值,因为它们无法覆盖以前设置的属性. (好吧,他们可以使用var任务,但据我所知,这不能用于从XML文件加载.)
有任何想法吗?我理想地寻找的是一个被称为类似的任务
<xmlvars file="myxmlpropertyfile.xml"/>
这将起作用
<xmlproperty file="myxmlpropertyfile.xml"/>
除了它覆盖变量.
最佳答案 使用< 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>循环将取消设置先前在< xmlproperty>中设置的所有变量任务.
诀窍是使用一个变量前缀,可以保证很容易找到变量名.因此foo-fighters.