在 Gradle Kotlin 脚本 (kts) DSL 中,如何使函数在其他脚本中可用?

In Gradle Kotlin script (kts) DSL, how to make a function usable in other scripts?

提问人:tribbloid 提问时间:11/6/2023 最后编辑:tribbloid 更新时间:11/6/2023 访问量:27

问:

假设我有一个 Kotlin 脚本:buildSrc

// buildSrc/src/main/kotlin/greet.gradle.kts
fun Project.greet(greeting: String) {
    println("$greeting from ${this.name}")
}

我希望在另一个脚本中启用该函数:greet

apply(from = "greet.gradle.kts")
apply(plugin = "greet")

greet("me")

但是没有,我仍然收到以下错误:apply works

 Unresolved reference: greet

正确的方法是什么?

gradle gradle-kotlin-dsl

评论


答:

0赞 Oleksii Shtanko 11/6/2023 #1

要使函数在 Gradle Kotlin 脚本 (kts) DSL 中的其他脚本中可用,您需要在 buildSrc/src/main/kotlin 目录内的单独 Kotlin 文件中定义该函数。此目录被 Gradle 视为包含的构建,这意味着它可以包含自己的依赖项,并可用于在多个项目之间共享代码。

这是你如何做到的:

在 buildSrc/src/main/kotlin 目录中创建一个新的 Kotlin 文件。我们称之为 Greeting.kt。

// buildSrc/src/main/kotlin/Greeting.kt
package com.example

fun Project.greet(greeting: String) {
   println("$greeting from ${this.name}")
}

在 build.gradle.kts 文件中,您现在可以导入并使用 greet 函数。

// build.gradle.kts
import com.example.greet

greet("me")

这会将我从 rootProjectName 打印到控制台。

请注意,buildSrc 目录必须与 build.gradle.kts 文件处于同一级别。如果不是,则需要移动它。

另外,请记住在将新文件添加到 buildSrc 后刷新 Gradle 项目。在大多数 IDE 中,可以通过单击 Gradle 工具窗口中的“刷新所有 Gradle 项目”按钮来完成此操作。

评论

0赞 tribbloid 11/6/2023
不幸的是,kt 文件将无法使用其他类扩展,例如 dependencies { implementation { ...}}。我只能使用 kts 文件,而不能使用 kt 文件