Gradle Kotlin DSL中如何让buildSrc内的函数在其他脚本可用?
正确实现方式
1. 调整文件结构与类型
buildSrc是Gradle自动识别的特殊子项目,其中的Kotlin代码会被编译并自动加入所有构建脚本的类路径,完全不需要用apply引入。你需要做这两步调整:
- 将
greet.gradle.kts重命名为GreetExtensions.kt(任意合法Kotlin类文件名均可,核心是改用.kt后缀,而非.kts脚本后缀) - 确保文件路径为
buildSrc/src/main/kotlin/GreetExtensions.kt
2. 修正扩展函数代码
在.kt文件中直接编写标准Kotlin扩展函数即可,无需脚本语法:
import org.gradle.api.Project fun Project.greet(greeting: String) { println("$greeting from ${this.name}") }
3. 在其他构建脚本中直接调用
因为buildSrc的代码会自动全局生效,你可以在任意build.gradle.kts(或Groovy版build.gradle)中直接调用该函数,不需要任何额外引入操作:
// 示例:在app模块的build.gradle.kts中调用 greet("Hello")
原方式无效的原因
apply(from = "greet.gradle.kts"):buildSrc下的脚本文件无法通过这种普通脚本引入方式加载,buildSrc的执行逻辑和普通构建脚本完全不同apply(plugin = "greet"):你仅定义了一个Project扩展函数,并未创建名为"greet"的Gradle插件,因此这种插件引入方式不适用
内容的提问来源于stack exchange,提问作者tribbloid
相关产品推荐
相关产品推荐

