Gradle脚本Kotlin和依赖关系管理

ljsrvy3e  于 2023-01-05  发布在  Kotlin
关注(0)|答案(3)|浏览(144)

我正在尝试将Spring Cloud Stream应用程序构建脚本移植到Kotlin。到目前为止,一切都很好,除了依赖管理块。在网络上很难找到任何东西。示例也没有涉及这个主题。
如何将下面的块转换为build.gradle.kts?谢谢。

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

bybem2ql1#

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

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日归档
依赖关系管理插件的最新版本现在对gradle脚本Kotlin更加友好,并将允许以下操作:

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

它仍然可以受益于一些Kotlin扩展函数,以消除对X1 M0 N1 X的需要(使用接收器代替),但绝对是一个改进!
2017年11月3日***
它现在可以在没有it的情况下工作,如下所示:

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

ryhaxcpt2#

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

References: https://docs.gradle.org/current/userguide/dependency_management_terminology.html#sub::terminology_platformhttps://docs.gradle.org/current/userguide/platforms.html#sub:bom_import

cld4siwp

cld4siwp3#

使用下面最新的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}")
    }
}

相关问题