重用 gradle.kts 函数
Reuse gradle.kts function
我有一个多项目 gradle.kts 设置,我想重用一个函数,例如
fun doSomethingWithString(string: String) { return string }
然后我在 dependencies {}
块中使用函数。
我愿意:
- 在根
build.gradle.kts
中定义 fun
- 在我可以在每个子项目中导入的其他文件中定义
fun
这样可行吗?
您可以在 buildSrc
project 中创建函数。
有多种方法可以解决这个问题。这里只是两个如何做到这一点的例子。两者使用相同的 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"))
示例:预编译脚本插件
您可以在 precompiled script plugin 的项目中将函数创建为额外的 属性,例如,如果您有 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
我有一个多项目 gradle.kts 设置,我想重用一个函数,例如
fun doSomethingWithString(string: String) { return string }
然后我在 dependencies {}
块中使用函数。
我愿意:
- 在根
build.gradle.kts
中定义 - 在我可以在每个子项目中导入的其他文件中定义
fun
fun
这样可行吗?
您可以在 buildSrc
project 中创建函数。
有多种方法可以解决这个问题。这里只是两个如何做到这一点的例子。两者使用相同的 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"))
示例:预编译脚本插件
您可以在 precompiled script plugin 的项目中将函数创建为额外的 属性,例如,如果您有 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