重用gradle.kts函数
我有一个多项目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
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!我已经用一个最小的工作示例构建配置对其进行了更新;我希望这对你也有用?您的配置与它有何不同?你能不能在你的问题上加一句?