重用gradle.kts函数

重用gradle.kts函数,gradle,gradle-kotlin-dsl,Gradle,Gradle Kotlin Dsl,我有一个多项目gradle.kts设置,我想重用一个函数,例如 fun doSomethingWithString(string:string){return string} 然后在dependencies{}块中使用该函数 我想: 在根build.gradle.kts中定义fun 在我可以在每个子项目中导入的其他文件中定义fun 这是可行的吗?您可以在中创建函数 有多种方法可以实现这一点。这里仅举两个例子说明如何做到这一点。两者都使用相同的buildSrc/build.gradle.kt

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

fun doSomethingWithString(string:string){return string}
然后在
dependencies{}
块中使用该函数

我想:

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

这是可行的吗?

您可以在中创建函数

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

插件{
`科特林dsl`
}
存储库{
jcenter()
}
示例:共享包级别函数 您可以在
buildSrc/src/main/kotlin/myconvention/myconventions.kt中创建包级函数:

包myconvention
fun doSomethingWithString(string:string):string{
返回字符串+“321”
}
然后,在(子)项目构建脚本中,可以按如下方式访问该函数:

println(myconvention.doSomethingWithString(“foo”))
示例:预编译脚本插件 例如,如果您有
buildSrc/src/main/kotlin/myproject.conventions.gradle.kts
,则可以在中创建函数作为项目的额外属性:

val doSomethingWithString by extra(
乐趣(弦:弦):弦{
返回字符串+“123”
}
)
然后,在(子)项目构建脚本中,可以按如下方式访问该函数:

插件{
id(“myproject.conventions”)
}
val doSomethingWithString:(String)->String by extra
println(doSomethingWithString(“foo”))
第一个示例的最小工作配置 完整的根项目目录结构(不包括文件):

├── 迈苏布
│   └── build.gradle.kts
├── buildSrc
│   ├── build.gradle.kts
│   └── src
│       └── 主要的
│           └── 科特林
│               └── myconvention
│                   └── myconventions.kt
└── settings.gradle.kts
  • mysub/build.gradle.kts
    仅包含
    println(myconvention.doSomethingWithString(“foo”)
  • buildSrc/build.gradle.kts
    buildSrc/src/main/kotlin/myconvention/myconventions.kt
    具有上述确切内容
  • settings.gradle.kts
rootProject.name=“我的测试”
包括(“mysub”)
运行
/gradlew项目时(使用Gradle 6.7.1),输出包含以下内容,如预期的那样:

>配置项目:mysub
foo321

第一种方法是我想要追求的。然而,它似乎不起作用:一旦我尝试在子项目中使用
myconvention.doSomethibg
,它就会显示
myconvention
的“未解析引用”。我还尝试导入myconvention.doSomething
,但没有成功。请注意,
buildSrc
项目未添加到
settings.gradle.kts
中,因为这也会导致错误。感谢您考虑我的答案@Vojtěch!我已经用一个最小的工作示例构建配置对其进行了更新;我希望这对你也有用?您的配置与它有何不同?你能不能在你的问题上加一句?