Gradle 脚本 Kotlin 和依赖管理

Gradle Script Kotlin and dependencyManagement

我正在尝试将 Spring Cloud Stream 应用构建脚本移植到 Kotlin。到目前为止,一切都很好,除了依赖管理块。很难在网上找到任何东西。示例也不涵盖该主题。

如何将以下块转换为 build.gradle.kts?谢谢

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2"
    }
}

完全没有测试过,但我相信应该是这样的:

import io.spring.gradle.dependencymanagement.DependencyManagementExtension
import io.spring.gradle.dependencymanagement.ImportsHandler

configure<DependencyManagementExtension> {
    imports(delegateClosureOf<ImportsHandler> {
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:Camden.SR2")
    })
}

如果没看过,应该对gradlescript kotlin的project extensions and groovy interop函数很熟悉。您真的必须深入了解您正在配置的 groovy 插件的源代码,以了解它期望如何使用闭包。 gradle 脚本 kotlin 项目中的示例也是一个很好的指南。

编辑 2016 年 12 月 19 日

依赖项管理插件的最新版本是 now more gradle script kotlin friendly 并且将允许以下内容:

configure<DependencyManagementExtension> {
    imports {
        it.mavenBom("io.spring.platform:platform-bom:Camden.SR2")
    }
}

它仍然可以从一些 Kotlin 扩展函数中受益,以消除对 it 的需求(改为使用接收器),但绝对是一个改进!

编辑 2017 年 11 月 3 日

它现在可以在没有 it 的情况下工作,就像这样:

configure<DependencyManagementExtension> {
    imports {
        mavenBom("io.spring.platform:platform-bom:Camden.SR2")
    }
}

使用下面的最新 io.spring.dependency-management:1.0.6.RELEASE 更简单的代码段也可以。

plugins {
    id("io.spring.dependency-management") version "1.0.6.RELEASE"
}

dependencyManagement {
    val springCloudVersion = "Finchley.SR2"
    imports {
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")
    }
}

Gradle 支持通过 platform 功能在 Groovy 和 Kotlin DSL 的 dependency 块中导入 BOM 文件。 platform 可以有几种使用方式,但您通常会看到它被用作控制传递依赖项版本的方法,类似于 Maven 中 <scope>import</scope> 的依赖项。

提供的代码块的翻译将是:

# Kotlin DSL
dependencies {
    // wrap the BOM coordinates with the "platform" keyword
    implementation platform("org.springframework.cloud:spring-cloud-dependencies:Camden.SR2")

    // declare other dependencies
}

Gradle 可以更进一步,不仅可以建议传递依赖项的版本,还可以通过 enforcedPlatform.

强制执行版本
dependencies {
   implementation enforcedPlatform("org.springframework.cloud:spring-cloud-dependencies:Camden.SR2")
}

参考资料: https://docs.gradle.org/current/userguide/dependency_management_terminology.html#sub::terminology_platform https://docs.gradle.org/current/userguide/platforms.html#sub:bom_import