Gradle Script Kotlin和dependencyManagement

时间:2016-11-26 13:15:04

标签: spring gradle kotlin build-script

我正在尝试将Spring Cloud Stream应用程序构建脚本移植到Kotlin。到目前为止,非常好,除了依赖管理块。在网上很难找到任何东西。样本也不包括该主题。

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

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

3 个答案:

答案 0 :(得分:13)

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

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")
    })
}

如果你还没有看过它,你应该熟悉gradle脚本kotlin的project extensionsgroovy 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")
    }
}

答案 1 :(得分:2)

在更简单的代码段下面使用最新的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}")
    }
}

答案 2 :(得分:0)

我在这里参加聚会有点晚了,但是看来Gradle支持在Groovy和Kotlin DSL的dependency块中导入BOM表文件。提供的代码块的翻译为:

dependencies {
    // note that the BOM coordinates are wrapped with the "platform" keyword
    implementation(platform("org.springframework.cloud:spring-cloud-dependencies:Camden.SR2"))

    // declare other dependencies
}

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