springgradlekotlinbuild-script

Gradle Script Kotlin and dependencyManagement


I am trying to port Spring Cloud Stream app build script to Kotlin. So far, so good, except the dependency management block. It's difficult to find anything in the net. Samples don't cover that topic, too.

How do I convert following block to build.gradle.kts? Thanks.

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

Solution

  • Totally not tested, but I believe it should be something like this:

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

    If you haven't seen it, you should be familiar with gradle script kotlin's project extensions and groovy interop functions. You really have to dig into the source of the groovy plugin you're configuring to see how it expects to use the closure. The examples in the gradle script kotlin project are also a good guide.

    Edit 19 Dec 2016

    The latest version of the dependency management plugin is now more gradle script kotlin friendly and will allow the following:

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

    It could still benefit from some Kotlin extension functions to remove the need for it (using a receiver instead), but definitely an improvement!

    Edit 3 Nov 2017

    It now works without the it, like so:

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