我正在寻找 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
}
useFilter https://github.com/gradle/gradle/blob/v5.6.0/subprojects/core/src/main/java/org/gradle/execution/taskgraph/TaskExecutionGraphInternal.java#L31是在非公共接口中声明的方法TaskExecutionGraphInternal
这是公众的子类型TaskExecutionGraph
由实际的任务图实现类来实现。
致电给useFilter
在 Groovy 中工作是因为动态调度:它在运行时搜索实际类的所有方法,从而允许调用那些无法通过公共 API 获得的方法。
在 Kotlin 中,您必须将任务图显式转换为该接口才能静态调用此方法:
(gradle.taskGraph as org.gradle.execution.taskgraph.TaskExecutionGraphInternal)
.useFilter { it.name.contains("GoogleServices") && ... }
请注意,使用非公共 Gradle API 会使您的构建变得脆弱并且对升级 Gradle 版本非常敏感。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)