2016-11-26 49 views
4

我想将端口的Spring Cloud Stream应用程序构建脚本移植到Kotlin。到目前为止,除了依赖管理块以外,这么好。网络中很难找到任何东西。样本也不包括该主题。Gradle脚本Kotlin和dependencyManagement

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

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

回答

8

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

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这个脚本科特林的project extensionsgroovy interop功能。你真的需要挖掘你正在配置的groovy插件的来源,看看它期望如何使用闭包。 gradle脚本kotlin项目中的例子也是一个很好的指导。

编辑二○一六年十二月一十九日

的依赖管理插件的最新版本是now more gradle script kotlin friendly并允许下列:

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

它仍然可以从一些科特林扩展功能中受益删除需要it(使用接收器代替),但绝对是一种改进!

编辑2017年11月3日

现在作品,未经it,像这样:

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

非常有效的一个未经考验的解决方案。谢谢。 ;)不幸的是,我只是Kotlin新手。但是,谢谢你的提示,我会更好地审视代码。 – waste

+0

不用担心。我相信当Gradle Script Kotlin更成熟时,Spring的指南/示例将会很快更新。虽然更好的解决方案是让Spring提供一些扩展功能来使DSL更友好一点(不需要'delegateClosureOf()')。例如'有趣DependencyManagementExtension.imports(进口:DependencyManagementHandler。() - > Unit){...}' –

+1

目前没有工作 – Czar