gradle - 重用 gradle.kts 函数
问题描述
我有一个多项目 gradle.kts 设置,我想重用一个函数,例如。
fun doSomethingWithString(string: String) { return string }
然后我在dependencies {}
块中使用该功能。
我想:
fun
在根内定义build.gradle.kts
fun
在我可以在每个子项目中导入的其他文件中定义
这可行吗?
解决方案
buildSrc
您可以在项目中创建您的函数。
有多种方法可以解决这个问题。这里仅举两个例子说明如何做到这一点。两者都使用相同的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/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"))
第一个示例的最小工作配置
完整的根项目目录结构(不包括Gradle Wrapper文件):
├── 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.kts
并buildSrc/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
推荐阅读
- neo4j - 在 Neo4j 中,是否可以使用 Python 通过其 ID 查找节点并执行操作?
- r - 将带有 yyyymm 的数据框转换为 R 中的日期
- flutter - 发布到 Firebase Analytics 时,启用 getx 的 Flutter 应用程序是否支持 FirebaseAnalyticsObserver 对象?
- bash - 如何将 bash 变量插入 cURL 请求的 JSON 正文?
- java - 华为.Hmf.tasks。创建新任务
- rsk - 如何将 RSK 节点暴露给外部网络?
- oauth - 声纳 GitLab 身份验证
- time-series - 如何在 tidymodels 中创建一个简单的时间序列朴素模型
- powershell - Pentaho 脚本调用无法正常工作
- python - 如何在python中优化二维中几个粒子的均方位移?