是否可以拥有包含多个源目录的文件集?

Lie*_*oen 2 ant

我有一些看起来像这样的ant逻辑:

<copy todir="src_@{version}" flatten="true">
    <fileset dir="${generic-libs.source}\prolo">
        <include name="**/*.c"/> <!-- all .c files including subfolders -->
        <include name="**/*.h"/> <!-- all .h files including subfolders -->
        <exclude name="**/test/*.*" /> <!-- exclude test (sub)folders -->
        <exclude name="**/test*.*" /> <!-- exclude remaining test sources -->
    </fileset>
    <fileset dir="${generic-libs.source}\genlo">
        <include name="**/*.c"/>
        <include name="**/*.h"/>
        <exclude name="**/test/*.*" />
        <exclude name="**/test*.*" />
    </fileset>
    <fileset dir="${generic-libs.source}\ptclo">
        <include name="**/*.c"/>
        <include name="**/*.h"/>
        <exclude name="**/test/*.*" />
        <exclude name="**/test*.*" />
    </fileset>
    ...
</copy>
Run Code Online (Sandbox Code Playgroud)

......还有10个相同的结构.

fileset标签的内容总是一样的,所以我想有一种方法可以缩短它吗?

Reb*_*bse 5

Ant 1.9.4 为此目的引入了multirootfileset:

新的resourcecollection类型的行为类似于<fileset>s和<dirset>s 的并集,它们共享相同的配置但具有不同的基目录.

在你的情况下像:

<multirootfileset basedirs="${generic-libs.source}\prolo,${generic-libs.source}\genlo,${generic-libs.source}\ptclo">
 <include name="**/*.c"/>
 <include name="**/*.h"/>
 <exclude name="**/test/*.*"/>
 <exclude name="**/test*.*"/>
</multirootfileset>
Run Code Online (Sandbox Code Playgroud)