了解gradle processResources过滤器语法

时间:2017-04-12 03:39:09

标签: gradle groovy

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

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

我明白这一点:

  • processResources是Java插件的一个任务,它是复制类型。
  • 我正在通过调用以下方法来配置processResources任务:

    AbstractCopyTask filesMatching(String pattern, Action<? super FileCopyDetails> action)

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

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

这是我迷失的地方。在闭包体中,我正在调用filter方法。它从何而来?它也不是来自隐式项目对象。并且,过滤方法甚至不应用于任何文件对象。如何替换令牌?并且,ReplaceTokens是一个类,如何将类名称作为参数在语法上起作用?

我没有连接点,我不确定这些点是否在gradle或groovy中。我已经通过文档和博客研究了一段时间但没有运气。我很感激一些帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您要查找的filter方法在CopySpec界面中定义,正好是herefilesMatching也在CopySpec中声明,ProcessResources - &gt; Copy - &gt; AbstractCopyTaskAbstractCopyTask实现CopySpec这些方法会在任务本身上调用。

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

我建议您下载gradle源,将它们导入IDE并从ProcessResourcess课程开始旅程 - 这是了解引擎盖下发生情况的最简单方法