gradle - 重用 gradle.kts 函数

标签 gradle gradle-kotlin-dsl

我有一个多项目 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/

    相关文章:

    android - 使用多个模板/风格构建单个 Apk

    maven - Gradle 将单个存档上传到多个存储库

    java - 如何使用 Gradle 生成可执行的 .sh 文件?

    node.js - 无法将插件添加到cordova项目。 npm错误?

    spring - 在将Spring Boot项目迁移到Gradle Kotlin DSL中摆脱警告

    selenium-webdriver - 由于 cucumber 步骤语法,无法在 gradle 中生成测试报告

    gradle - build.gradle.kts 中的自定义清理/删除任务

    gradle - 尝试在Gradle中使用自定义Kotlin编译器插件时,为什么会出现UnknownPluginException?

    java - 如何将 JUnit 5 与 build.gradle.kts 和 kotlin 一起使用?

    gradle - 如何为 buildSrc 和应用程序模块定义 Kotlin 版本?