4

我目前正在从 Ant 中的 XML 文件加载属性。但是,我想在 for 循环中执行我当前的 ant 任务,同时每次都为同一组属性加载一个新的 XML 属性文件。

我知道 ant-contrib 的 var 任务的存在,它允许我覆盖属性。但是,我不确定如何将其与从 XML 文件加载属性结合使用。起初我想遍历所有属性,然后使用 propertyregex 任务将它们设置为新值。不幸的是,当我开始编写代码时,我意识到我仍然不知道如何实际加载属性值,因为它们无法覆盖以前设置的属性。(好吧,他们可以使用 var 任务,但据我所知,这不能用于从 XML 文件加载。)

有任何想法吗?我理想地寻找的是一个被称为类似的任务

<xmlvars file="myxmlpropertyfile.xml"/>

它的功能就像

<xmlproperty file="myxmlpropertyfile.xml"/>

除了它覆盖变量之外。

4

2 回答 2

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>循环,该循环将取消您之前在<xmlproperty>任务中设置的所有变量。

诀窍是使用变量前缀来保证变量名很容易找到。因此foo-fighters

于 2012-09-14T02:32:59.433 回答
0

看起来我应该能够通过使用 var 任务的 unset 属性来完成此任务。会回来汇报...

于 2012-09-13T23:57:05.853 回答