【问题标题】:TaskGraph.useFilter alternates for kotlin dslTaskGraph.useFilter 替代 kotlin dsl
【发布时间】:2019-11-14 21:57:15
【问题描述】:

我正在从 gradle 中寻找这行代码的替代方法,我正在寻找它在 kotlin dsl 中的对应部分,任何人都可以对此有所了解,因为它阻碍了我的构建,并且由于 usefilter 不可用而不知所措在 kotlin dsl 中

gradle.taskGraph.useFilter {
    if (task.name.contains("GoogleServices") && (task.name.contains("Perf") || task.name.contains("Demo") || task.name.contains("Dev") || task.name.contains("Debug"))) {
        return false
    }
    return true
}

【问题讨论】:

    标签: android gradle kotlin gradle-kotlin-dsl


    【解决方案1】:

    useFilter 是在非公共接口TaskExecutionGraphInternal 中声明的方法,它是公共TaskExecutionGraph 的子类型,由实际的任务图实现类实现。

    useFilter 的调用在Groovy 中工作是因为动态调度:它在运行时搜索实际类的所有方法,从而允许调用那些无法通过公共API 获得的方法。

    在 Kotlin 中,您必须将任务图显式转换为该接口才能静态调用此方法:

    (gradle.taskGraph as org.gradle.execution.taskgraph.TaskExecutionGraphInternal)
        .useFilter { it.name.contains("GoogleServices") && ... }
    

    请注意,使用非公共 Gradle API 会使您的构建变得脆弱,并且对升级 Gradle 版本很敏感。

    【讨论】:

      猜你喜欢
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2019-04-06
      • 1970-01-01
      • 2020-12-23
      • 2019-03-22
      • 2018-11-05
      相关资源
      最近更新 更多