ext en buildscript no puede ser reconocido por Gradle Kotlin DSL

En estos días, estoy tratando de escribir algunos códigos para experimentar las características reactivas de Spring y la extensión de Kotlin en la spring 5, y también preparé una grap Kotlin DSL build.gradle.kt para configurar la construcción gradle.

build.gradle.kt se convierte a partir de los códigos de plantilla Spring Boot generados por http://start.spring.io .

Pero buildscript no puede detectar la ext en el buildscript de compilation.

 buildscript { ext { } } 

La ext causará un error de generación de Gradle.

Para hacer que las variables en classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") y compile("org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlinVersion") funcionen, agregué las variables de la manera difícil.

 val kotlinVersion = "1.1.4" val springBootVersion = "2.0.0.M3" 

Pero tengo que declararlos en la mejor location global y duplicarlos en el buildscript .

Código: https://github.com/hantsy/spring-reactive-sample/blob/master/kotlin-gradle/build.gradle.kts

¿Hay un enfoque elegante para hacer que ext funcione?

Actualización : hay algunos enfoques desagradables:

  1. Desde el ejemplo DSL de Gradle Kotlin, https://github.com/gradle/kotlin-dsl/tree/master/samples/project-properties , declara las properties en gradel.properties.

     kotlinVersion = 1.1.4 springBootVersion = 2.0.0.M3 

    Y úselo en build.gradle.kts.

     buildScript{ val kotlinVersion by project } val kotlinVersion by project //another declare out of buildscript block. 
  2. Similar a la anterior, declararlos en el bloque de buildScript:

     buildScript{ extra["kotlinVersion"] = "1.1.4" extra["springBootVersion"] = "2.0.0.M3" val kotlinVersion: String by extra } val kotlinVersion: String by extra//another declare out of buildscript block. 

¿Cómo puedo evitar la duplicación de val kotlinVersion: String by extra ?