Gradle Script Kotlin和dependencyManagement

wst*_*wst 9 spring build-script gradle kotlin

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

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

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2"
    }
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*ett 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")
    })
}
Run Code Online (Sandbox Code Playgroud)

如果你还没有看到它,你应该熟悉gradle脚本kotlin的项目扩展groovy互操作函数.你真的必须深入研究你正在配置的groovy插件的来源,看看它希望如何使用闭包.gradle脚本kotlin项目中的示例也是一个很好的指南.

编辑2016年12月19日

最新版本的依赖管理插件现在更加友好的gradle脚本kotlin并允许以下内容:

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

它仍然可以从一些Kotlin扩展功能中获益,以消除it(使用接收器)的需要,但绝对是一种改进!

编辑2017年11月3日

它现在没有了it,就像这样:

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


sgi*_*son 9

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

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

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

    // declare other dependencies
}
Run Code Online (Sandbox Code Playgroud)

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

dependencies {
   implementation enforcedPlatform("org.springframework.cloud:spring-cloud-dependencies:Camden.SR2")
}
Run Code Online (Sandbox Code Playgroud)

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


Kan*_*ane 6

使用最新的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}")
    }
}
Run Code Online (Sandbox Code Playgroud)