如何重用多个文件集的定义?
how to reuse the definition of a number of filesets?
我的 build.xml
中有许多任务都使用同一组文件集。例如。类似于以下内容(我保留了任务的实际名称 - 与 cobertura 覆盖工具相关 - 但包络任务的性质对这个问题并不重要)。
<target name="coverage-report">
<cobertura:cobertura-report destdir="${coverage.xml.dir}" format="xml">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<fileset dir="${componentFoo.dir}/src">
<include name="**/*.java" />
</fileset>
</cobertura:cobertura-report>
</target>
<target name="summary-coverage-report">
<cobertura:cobertura-report destdir="${coverage.summaryxml.dir}" format="summaryXml">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<fileset dir="${componentFoo.dir}/src">
<include name="**/*.java" />
</fileset>
</cobertura:cobertura-report>
</target>
<target name="alternate-coverage-report">
<cobertura:cobertura-report destdir="${coverage.html.dir}">
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
<fileset dir="${componentFoo.dir}/src">
<include name="**/*.java" />
</fileset>
</cobertura:cobertura-report>
</target>
我想做的是能够一次定义这组循环文件集并重新使用它。现在,有一个关于如何在多个地方使用相同文件集的相关 SO question,但这在这里不起作用,因为我有许多文件集,而不仅仅是一个。我还尝试将文件集包装在 macrodef
中,并在需要时扩展 macrodef
,但我得到的消息是这些任务 "don't support the nested [name of macrodef] element"。所以我猜测Ant中的macrodef
s只能作为高级任务,不能在任意地方展开。
那么有没有办法在 Ant 中重用多个文件集的定义?
如果 cobertura 任务接受任意资源集合而不是硬编码为 fileset
,这将很容易 - 为此可能值得提交功能请求。例如 copy
任务:
<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>
我的 build.xml
中有许多任务都使用同一组文件集。例如。类似于以下内容(我保留了任务的实际名称 - 与 cobertura 覆盖工具相关 - 但包络任务的性质对这个问题并不重要)。
<target name="coverage-report">
<cobertura:cobertura-report destdir="${coverage.xml.dir}" format="xml">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<fileset dir="${componentFoo.dir}/src">
<include name="**/*.java" />
</fileset>
</cobertura:cobertura-report>
</target>
<target name="summary-coverage-report">
<cobertura:cobertura-report destdir="${coverage.summaryxml.dir}" format="summaryXml">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<fileset dir="${componentFoo.dir}/src">
<include name="**/*.java" />
</fileset>
</cobertura:cobertura-report>
</target>
<target name="alternate-coverage-report">
<cobertura:cobertura-report destdir="${coverage.html.dir}">
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
<fileset dir="${componentFoo.dir}/src">
<include name="**/*.java" />
</fileset>
</cobertura:cobertura-report>
</target>
我想做的是能够一次定义这组循环文件集并重新使用它。现在,有一个关于如何在多个地方使用相同文件集的相关 SO question,但这在这里不起作用,因为我有许多文件集,而不仅仅是一个。我还尝试将文件集包装在 macrodef
中,并在需要时扩展 macrodef
,但我得到的消息是这些任务 "don't support the nested [name of macrodef] element"。所以我猜测Ant中的macrodef
s只能作为高级任务,不能在任意地方展开。
那么有没有办法在 Ant 中重用多个文件集的定义?
如果 cobertura 任务接受任意资源集合而不是硬编码为 fileset
,这将很容易 - 为此可能值得提交功能请求。例如 copy
任务:
<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>