Ant 如何重用多个文件集的定义?

Ant 如何重用多个文件集的定义?,ant,Ant,我的build.xml中有许多任务都使用同一组文件集。例如,类似以下内容(我保留了与cobertura覆盖工具相关的任务的实际名称,但封装任务的性质对这个问题并不重要) 我想做的是能够定义一次这组重复出现的文件集并重用它。现在,有一个关于如何在多个地方使用同一文件集的相关问题,但这在这里不起作用,因为我有很多文件集,而不仅仅是一个。我还尝试将文件集包装在macrodef中,并在需要时扩展macrodef,但我得到的信息是,这些任务“不支持嵌套的[name of macrodef]元素”。所以

我的
build.xml
中有许多任务都使用同一组文件集。例如,类似以下内容(我保留了与cobertura覆盖工具相关的任务的实际名称,但封装任务的性质对这个问题并不重要)


我想做的是能够定义一次这组重复出现的文件集并重用它。现在,有一个关于如何在多个地方使用同一文件集的相关问题,但这在这里不起作用,因为我有很多文件集,而不仅仅是一个。我还尝试将文件集包装在
macrodef
中,并在需要时扩展
macrodef
,但我得到的信息是,这些任务“不支持嵌套的[name of macrodef]元素”。所以我猜Ant中的
macrodef
s只能用作高级任务,不能在任意位置进行扩展


那么,有没有一种方法可以在Ant中重用大量文件集的定义呢?

如果cobertura任务接受任意资源集合,而不是硬编码为仅
文件集,那么这将是很容易的-为此,可能值得提交一个特性请求。例如,对于
复制任务:

<resources id="filesets">
    <fileset dir="${src.dir}">
        <include name="**/*.java" />
    </fileset>
    <fileset dir="${componentFoo.dir}/src">
        <include name="**/*.java" />
    </fileset>
</resources>


<copy todir="dest">
    <resources refid="filesets"/>
</copy>

您可以退回到纯XML级别并使用实体引用:

<!DOCTYPE project [
  <!ENTITY cobFilesets '<fileset dir="${src.dir}">
        <include name="**/*.java" />
    </fileset>
    <fileset dir="${componentFoo.dir}/src">
        <include name="**/*.java" />
    </fileset>'>
]>
<project ....>
    <target name="coverage-report">
        <cobertura:cobertura-report destdir="${coverage.xml.dir}" format="xml">
          &cobFilesets;
        </cobertura:cobertura-report>
    </target>
</project>

]>
&文件集;

Ant baulks:“内容中不允许使用DOCTYPE。”@MarcusJuniusBrutus您将DOCTYPE声明放在哪里了?它必须位于文件的顶部,紧靠打开的
标记之前(但如果有声明,则在
声明之后)。
<!DOCTYPE project [
  <!ENTITY cobFilesets '<fileset dir="${src.dir}">
        <include name="**/*.java" />
    </fileset>
    <fileset dir="${componentFoo.dir}/src">
        <include name="**/*.java" />
    </fileset>'>
]>
<project ....>
    <target name="coverage-report">
        <cobertura:cobertura-report destdir="${coverage.xml.dir}" format="xml">
          &cobFilesets;
        </cobertura:cobertura-report>
    </target>
</project>