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
我正在尝试将 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