【问题标题】:How can I share build config between two build.gradle.kts files?如何在两个 build.gradle.kts 文件之间共享构建配置?
【发布时间】:2026-02-04 06:00:02
【问题描述】:

我有两个项目(在一个 git 存储库中)应该有相同的

repository {

}

在他们的build.gradle.kts 部分,但在其他方面完全不相关。

我可以把这个共同的部分分解出来并包含在每个相应的build.gradle.kts 中吗?怎么样?

【问题讨论】:

    标签: gradle kotlin gradle-kotlin-dsl


    【解决方案1】:

    更新0.11.0 版本中,applyFrom(uri) 已被删除。

    您现在应该改用:

    apply {
        from("dir/myfile.gradle")
    }
    

    旧答案

    使用 Groovy 构建脚本,您可以执行 apply from: 'dir/myfile.gradle' 之类的操作,其中 dir/myfile.gradle 是包含您共享的 repositories 块的文件。

    以与Gradle Script Kotlin 类似的方式(至少使用0.4.1),您可以使用applyFrom(script: Any) 方法。

    build.gradle.kts

    applyFrom("dir/myfile.gradle")
    

    如果您需要从子项目中应用它,您可以执行以下操作:

    applyFrom("${rootProject.rootDir}/dir/myfile.gradle")
    

    【讨论】:

      【解决方案2】:

      不知道它是否适用于 kotlin,但是您可以尝试从普通 gradle 等效:

      lol.gradle

      apply plugin: 'java'
      
      repositories {
         mavenCentral()
      }
      

      build.gradle

      apply from: 'lol.gradle'
      

      以上工作正常。请注意 lol.gradle 应用了 java 插件 - 它添加了存在 repositories 的上下文,因此可以应用。

      【讨论】:

        【解决方案3】:

        我们使用捆绑在自定义 gradle 发行版中的 init script 将我们的公司 Nexus 存储库应用到每个 gradle 项目。如果您有很多项目,值得考虑。

        【讨论】:

          【解决方案4】:

          当在每个项目中复制通用配置时,我遇到了类似的问题。通过使用 init 脚本中定义的通用设置的自定义 gradle 分发解决了这个问题。

          创建了一个用于准备此类自定义分发的 gradle 插件 - custom-gradle-dist。它非常适合我的项目,例如一个库项目的 build.gradle 看起来像这样(这是一个完整的文件,所有 repositoryplugin、常见的依赖项 等在自定义初始化脚本中定义):

          dependencies {
              compile 'org.springframework.kafka:spring-kafka'
          }
          

          【讨论】: