4

这似乎应该是显而易见的,但我认为不是。鉴于:

  • 以空格分隔的文件列表(或逗号分隔等)
  • 列入白名单的<patternset>模式

我如何想出一个<fileset>包含列表中与白名单模式匹配的所有文件的文件?

从列表中获取文件列表很容易:

<patternset id="the-patternset" 包括="${list.of.files}" />
<fileset id="the-fileset" dir="${basedir}">
    <patternset refid="the-patternset" />
</文件集>
<pathconvert pathsep="${line.separator}" property="the-filelist" refid="the-fileset"/>
<echo>文件集:${the-filelist}</echo>

…会很高兴地生成一个文件集,其中包含${list.of.files}. 但添加各种过滤器:

<patternset id="the-filter">
    <include name="includeme/**/*.java" />
    <exclude name="excludeme/**/*.java" />
</模式集>

<patternset id="the-patternset" 包括="${list.of.files}" />
<fileset id="the-fileset" dir="${basedir}">
    <patternset refid="the-patternset" />
    <patternset refid="the-filter" />
</文件集>
<pathconvert pathsep="${line.separator}" property="the-filelist" refid="the-fileset"/>
<echo>文件集:${the-filelist}</echo>

…将列出模式集的并集——即所有匹配the-filter the-patternset的文件。

如何生成一个文件集,其中包含${list.of.files} 匹配的文件the-patternset

4

1 回答 1

1

这是一个盆栽的例子。从您的每个模式集中创建两个文件集(或者可能是文件列表)。我将在这里使用固定列表:

<property name="list.1" value="a,b,c" />
<property name="list.2" value="b,c,d" />

<fileset dir="." id="set.1" includes="${list.1}" />
<fileset dir="." id="set.2" includes="${list.2}" />

然后使用<intersect>资源集合获取所需的“重叠”集:

<intersect id="intersect">
    <resources refid="set.1"/>
    <resources refid="set.2"/>
</intersect>

大多数 Ant 任务将允许您使用资源集合来代替简单的文件集。

于 2013-02-06T21:55:43.810 回答