You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

混合使用Groovy与Kotlin DSL:如何访问extra定义的函数

解决Groovy脚本闭包在Kotlin DSL中引用失败的问题

问题原因

Groovy中通过ext.someFunction = { ... }定义的是Groovy Closure类型,而非Kotlin的函数类型() -> Boolean。直接用Kotlin函数类型声明by extra会因为类型不匹配,导致Gradle找不到对应的extra属性。

解决方案

方案1:直接以Groovy Closure类型引用并调用

在Kotlin DSL中,将变量声明为Groovy的Closure<Boolean>类型,然后通过call()方法执行:

apply("./old_script.gradle")
val someFunction: Closure<Boolean> by extra
someFunction.call()

方案2:将Closure转换为Kotlin函数类型

如果更习惯Kotlin函数的调用方式,可以把Closure强制转换为Kotlin函数类型:

apply("./old_script.gradle")
val someFunction: () -> Boolean = extra["someFunction"] as () -> Boolean
someFunction()

或者使用by extra委托并指定转换逻辑:

apply("./old_script.gradle")
val someFunction: () -> Boolean by extra { it as () -> Boolean }
someFunction()

额外检查点

  • 确认apply("./old_script.gradle")的路径正确,确保Gradle能找到旧脚本文件(可使用绝对路径或相对于项目根目录的路径测试)。
  • 确保脚本应用的时机正确,避免在Gradle配置阶段过早引用还未初始化的ext属性(比如不要在插件尚未完全配置的块内调用)。

内容的提问来源于stack exchange,提问作者kristyna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:10:03