关于groovy:了解gradle过程资源过滤器语法

Understanding gradle processResources filter syntax

以下内容似乎是gradle中用于过滤资源文件子集的常见用法。我了解它的作用,但无法理解语法:

1
2
3
4
5
processResources {
    filesMatching('foo/*.html') {
        filter(ReplaceTokens, tokens: [key: 'value'])
    }
}

我到目前为止了解:

  • processResources是Java插件的任务,其类型为Copy。

  • 我通过调用以下方法来配置processResources任务:

    AbstractCopyTask filesMatching(String pattern, Action action)

  • 该方法的第一个参数是模式字符串。我正在提供'foo / *。html'作为模式。

  • 该方法的第二个参数是Action接口,它只有一个方法。我提供一个闭包作为接口的实现。

这是我迷路的地方。在封闭体内,我正在调用过滤方法。它从何而来?它也不来自隐式项目对象。而且,过滤器方法甚至不应用于任何文件对象。代币如何更换?而且,ReplaceTokens是一个类,如何将类名作为参数传递在语法上起作用?

我没有连接圆点,也不确定圆点是否处于毛刺或粗糙状态。我已经通过文档和博客进行了一段时间的研究,但没有走运。感谢您的帮助。谢谢。


您要查找的filter方法是在CopySpec界面中定义的,正是在这里。 filesMatching也在CopySpec中声明,并且由于ProcessResources-> Copy-> AbstractCopyTaskAbstractCopyTask实现CopySpec,因此这些方法在任务本身上被调用。

令牌替换由来自Ant的ReplaceTokens类完成,涉及groovy String == String.class中的语法。 过滤本身在此类中运行。

我可能建议您下载gradle源,将它们导入IDE并从ProcessResourcess类开始旅程-这是了解幕后情况的最简单方法。