Gradle Copy 任务:为什么可以使用可以调用“into”方法的配置闭包来调用“from”方法?

肌肉

考虑以下来自 gradle 文档的示例(稍微简化):

task initConfig(type: Copy) {
     from('src/main/config') {
         include '**/*.properties'
         include '**/*.xml'
         filter(ReplaceTokens, tokens: [version: '2.3.1'])
     }
 }

这里,“from”方法在 AbstractCopyTask 类中声明,具有以下签名:

public AbstractCopyTask from​(Object sourcePath, Closure c)

其中 c - 用于配置子 CopySourceSpec 的闭包。CopySourceSpec 是一个仅声明“from”方法的接口。

问题:为什么上面示例中的闭包允许调用“include”和“filter”方法,如果它是通过子 CopySourceSpec 的文档配置闭包只允许调用“from”方法?

蒂姆_耶茨

include从哪里来AbstractCopyTask

例如,您可以在 groovy 中执行此操作:

class FromSpec {
    String who
    
    FromSpec(String who) {
        this.who = who
    }
    
    def capitalize() {
        who = who.capitalize()
    }
}

class Testing {
    FromSpec spec
    
    def sayHello() {
        println "Hello $spec.who"
    }
    
    def from(String who, Closure c) {
        this.spec = new FromSpec(who)
        c.delegate = this.spec
        c.call()
    }
    
    def run(Closure c) {
        c.delegate = this
        c.call()
    }

}

通过使用闭包委托,我们可以做到这一点

new Testing().run {
    from('peshi') {
        capitalize() // A method in the FromSpec
        sayHello()   // A method in the owner Testing class
    }
}

我们得到输出

Hello Peshi

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Gradle Copy任务说没有来源

Gradle Copy任务始终是最新的

Gradle Copy任务不会复制文件

Gradle Copy任务始终为最新

如何打印Gradle Copy任务的“从”和“至”?

Gradle Copy任务仅执行部分复制

Gradle脚本:ant.copy任务中的Classcast异常

Gradle Copy任务:如何覆盖现有文件?

Gradle任务。“(type:Copy)”和<doLast>不能同时工作

在Gradle Copy任务中动态设置文件权限

从任务中调用任务的替代方法,Gradle

有没有什么方法可以使用Gradle而不是像Android Studio这样的IDE来构建apk?

Gradle:从任务中调用 Groovy 静态方法

如何使用 Gradle Copy 任务重命名我正在复制的文件路径上的目录?

Android Gradle:在gradle任务或方法中调用buildConfigield

为什么有两种方法可以在Gradle中创建任务?

有没有一种方法可以配置Gradle插件来执行带有构建的任务?

我可以使用詹金斯矩阵配置计划两个gradle任务吗?

gradle-当我执行任务时,为什么还要调用配置阶段

Gradle Copy Task导致文件权限问题

为什么可以在gradle任务的名称中忽略引号

如何在自定义 Gradle 任务中调用方法?

如何从productflavor调用gradle任务

使用闭包配置自定义 Gradle sourceSet

Jenkins Gradle集成:调用Gradle与使用Gradle Wrapper选项

GRADLE任务运行配置

任务的gradle配置

Gradle任务依次调用其他任务

Gradle,从(或之前)uploadArchives任务调用签名任务