Apache Ant 1.8 宏调用嵌套

Apache Ant 1.8 macro invocation nesting

这几乎可以肯定是重复的,但只是为了将其简化为最基本的形式:

我想写一对宏,用作:

<defined-environment>
  <task-in-environment>
  <task-in-environment>
  ...
</defined-environment>

.. 理想情况下,我希望能够将宏定义的包含任务任务与普通 Ant 任务混合。

唉,我似乎无法完成这项工作。即使我使 的子包装器显式而不是隐式,我也会收到投诉,认为 不应该是我试图包装它的元素的子元素。这表现得好像 Ant 1.8 根本不理解嵌套宏用法的概念。

这真的是真的吗 -- Ant 的宏扩展是否严格是一次性的和非递归的,我真的必须编写新的 Ant 实现代码来支持这种用法吗?还是我遗漏了一些细节,这将使这成为可能?我真的希望现代宏处理器能够处理这种嵌套...

(是的,我知道 macrosdefs 可以调用其他宏。这不允许我需要的语法。也不会向 添加参数,因为包含的任务数量会因一种用法而异.)

附录

好的,看起来人们想要一个明确的例子。这不是我正在做的——我的更复杂,这就是为什么我想在宏中隐藏细节——但它具有相同的一般结构并演示了问题...

<macrodef name="collection">
    <attribute name="id"/>
    <element name="contents" implicit="yes"/>
    <sequential>
          <union id="@{id}">
               <contents/>
          </union>
    </sequential >
 </macrodef>
 <macrodef name="mappedfile">
    <attribute name="fromdir"/>
    <attribute name="todir"/>
    <attribute name="whichfile"/>
    <sequential>
          <mappedresources>
               <globmapper from="*" to="@{todir}/*"/>
                <fileset dir="@{fromdir}" includes="@{whichfile}"/>
          </mappedresources>
    </sequential >
</macrodef>

<collection id="myfiles">
    <mappedfile fromdir="/actual/directory"  whichfile="a.a" todir="/imaginary/directory"/>
    <mappedfile fromdir="/another/directory"  whichfile="b.b" todir="/imaginary/directory"/>
</collection> 

生成一个名为 myfiles 的资源集合,它引用来自两个不同目录的文件,但假装它们都来自假想的目录。

或者应该。据我所知,没有充分的理由它不应该工作。但 Ant 1.8 似乎确实无法处理这个问题,而且我必须编写插件任务定义代码才能获得我正在寻找的语法抽象。或者使用更智能的xml处理工具作为预处理器

无论如何,我的版本都找到了解释...

ant 中的宏被定义为创建任务,即使它们扩展到的标签是资源。 (固定的措辞。请注意,Ant 不会抱怨此类宏体;它们只是不起作用。)

Union 可以将其他 resources/resource 集合作为子集合。不是任务

布拉莫。我什至不需要嵌套的宏调用来阻止我做我想做的事;我根本无法使用内部宏——这是简化我试图支持的逻辑的更重要的宏。

你无法从这里到达那里。

谢谢大家。