重用 gradle.kts 函数

时间:2020-12-30 21:42:21

标签: gradle gradle-kotlin-dsl

我有一个多项目 gradle.kts 设置,我想重用一个函数,例如。

fun doSomethingWithString(string: String) { return string }

然后我在 dependencies {} 块中使用该函数。

我想:

  • 在根 fun 中定义 build.gradle.kts
  • 在我可以在每个子项目中导入的其他文件中定义 fun

这可行吗?

1 个答案:

答案 0 :(得分:2)

您可以在 https://our.umbraco.com/documentation/reference/templating/mvc/forms 中创建您的函数。

有多种方法可以解决这个问题。这里仅举两个例子说明如何做到这一点。两者都使用相同的 buildSrc/build.gradle.kts:

plugins {
    `kotlin-dsl`
}

repositories {
    jcenter()
}

示例:共享包级函数

您可以创建包级函数,例如,在 buildSrc/src/main/kotlin/myconvention/myconventions.kt 中:

package myconvention

fun doSomethingWithString(string: String): String {
  return string + "321"
}

然后在您的(子)项目构建脚本中,您可以按如下方式访问该功能:

println(myconvention.doSomethingWithString("foo"))

示例:预编译脚本插件

您可以在 buildSrc project 中将函数创建为项目的额外属性,例如,如果您有 buildSrc/src/main/kotlin/myproject.conventions.gradle.kts

val doSomethingWithString by extra(
  fun(string: String): String {
    return string + "123"
  }
)

然后在您的(子)项目构建脚本中,您可以按如下方式访问该功能:

plugins {
    id("myproject.conventions")
}
val doSomethingWithString: (String) -> String by extra

println(doSomethingWithString("foo"))

第一个示例的最小工作配置

完整的根项目目录结构(不包括 precompiled script plugin 文件):

├── mysub
│   └── build.gradle.kts
├── buildSrc
│   ├── build.gradle.kts
│   └── src
│       └── main
│           └── kotlin
│               └── myconvention
│                   └── myconventions.kt
└── settings.gradle.kts
  • mysub/build.gradle.kts 只包含 println(myconvention.doSomethingWithString("foo"))
  • buildSrc/build.gradle.ktsbuildSrc/src/main/kotlin/myconvention/myconventions.kt 具有上述内容
  • settings.gradle.kts
rootProject.name = "my_test"
include("mysub")

运行 ./gradlew projects 时(使用 Gradle 6.7.1),输出包含以下内容,如预期:

> Configure project :mysub
foo321