gpt4 book ai didi

gradle - 重用 gradle.kts 函数

转载 作者:行者123 更新时间:2023-12-04 11:30:09 27 4
gpt4 key购买 nike

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

fun doSomethingWithString(string: String) { return string }
然后我使用 dependencies {} 中的函数堵塞。
我想:
  • 定义 fun根内build.gradle.kts
  • 定义 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.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

    关于gradle - 重用 gradle.kts 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65513944/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com