gradle 中的 Ant <resources>、<patternset> 等价于什么?

what are equivalent of Ant <resources>, <patternset> in gradle?

我正在将基于 ant 的项目迁移到 gradle 项目。我必须在许多任务中使用一组文件或模式,这让我写了重复的代码,而它可以简单地保存在 ant 的资源和模式集标签中。 gradle.

中是否有任何更简单的方法,例如等效于资源或模式集
<patternset id="pattern.files.to.instrument">
    <include name="lib/cat*.jar"/>
    <include name="lib/extensions/cat*.jar"/>
    <include name="lib/cas*.jar"/>
    <include name="bld/internal-lib/cat*.jar"/>
    <exclude name="**/*test.jar"/>
    <exclude name="**/*.war"/>
</patternset>

<fileset id="fileset.instrument" dir="${uninstrumented.jars.folder}">
    <patternset refid="pattern.files.to.instrument"/>
</fileset>

我不熟悉 Ant,但我对 Gradle 中类似概念的第一个想法是 FileTree (or a ConfigurableFileTree)。您可以配置一次 FileTree 并且(因为它实现了 FileCollection)在任何您想要使用与您指定的模式匹配的文件的地方引用它:

def filesToInstrument = fileTree(projectDir) {
    include 'lib/cat*.jar'
    include 'lib/extensions/cat*.jar'
    include 'lib/cas*.jar'
    include 'bld/internal-lib/cat*.jar'
    exclude '**/*test.jar'
    exclude '**/*.war'
}

task copyFilesToInstrument(type: Copy) {
    from filesToInstrument
    into 'my/destination/path'
}

然而,据我所知,FileTree 元素总是绑定到根目录,所以如果你只想重用 include/exclude 模式,你可以看看 CopySpec. CopySpec 类型的元素可以使用方法 with 在实现 CopySpec 自身的任务上重用(例如 CopyZipJar .. .):

def filesToInstrumentPattern = copySpec {
    include 'lib/cat*.jar'
    include 'lib/extensions/cat*.jar'
    include 'lib/cas*.jar'
    include 'bld/internal-lib/cat*.jar'
    exclude '**/*test.jar'
    exclude '**/*.war'
}

task zipFilesToInstrument(type: Zip) {
    from fileTree('src')
    with filesToInstrumentPattern
}