Gradle KTS. ¿Cómo mover la configuration de dependencies a un file separado de la compilation principal?

Intento crear un script de compilation modular en kotlin. Básicamente script principal y script de dependencies. en build.gradle.kts tengo:

applyFrom("dependencies.kts") 

y en dependencies.kts tengo las dependencies reales:

 dependencies { listOf( kotlinModule("stdlib-jre8"), // Spring boot "org.springframework.boot:spring-boot-starter-web", "org.springframework.boot:spring-boot-starter-security", "org.springframework.boot:spring-boot-starter-logging", "org.springframework.boot:spring-boot-actuator", // Spring "org.springframework.data:spring-data-mongodb", // Logging "org.slf4j:slf4j-api", "org.slf4j:jcl-over-slf4j", "ch.qos.logback:logback-classic" ).forEach { compile(it) } listOf( "org.codehaus.groovy:groovy-all", "org.springframework.boot:spring-boot-starter-test", "org.spockframework:spock-core:1.0-groovy-2.4", "org.spockframework:spock-spring:1.0-groovy-2.4" ).forEach { testCompile(it) } } 

Esto falla con:

 Error: Could not find method kotlinModule() for arguments [stdlib-jre8] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. 

Si bash importar kotlinModule, falla con:

 Error:Cause: startup failed: script '/home/czar/personal/work/***/dependencies.kts': 1: unable to resolve class org.gradle.script.lang.kotlin.kotlinModule @ line 1, column 1. import org.gradle.script.lang.kotlin.kotlinModule ^ 1 error 

¿Qué estoy haciendo mal y cómo hacerlo bien?

Versiones e información relevante:

  • Gradle: 4.0
  • Gradle KTS: 0.9.0
  • editor: IntelliJ U 2017.1.4
  • Plugin de Kotlin: 1.1.3 EAP
  • Versión de Kotlin para el proyecto: 1.1.2.5

Mi compilation funciona perfectamente cuando tengo dependencies en el file principal. Todas las configuraciones necesarias (buildscript, plugins, repositorys, etc.) están presentes, pero se omiten aquí por brevedad.

Un par de cosas aqui:

  1. Supongo que no tiene nada dentro de build.gradle.kts pero applyFrom("dependencies.kts") ; si es así, aún necesitas un bloque de buildscript y plugins en él:

     buildscript { repositories { //gradleScriptKotlin() mavenCentral() maven { setUrl("https://repo.spring.io/milestone") } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M2") classpath(kotlin("gradle-plugin")) } } plugins { //id("io.spring.dependency-management") id("org.gradle.application") id("org.gradle.idea") //id("org.gradle.java") id("org.jetbrains.kotlin.jvm") version "1.1.2-5" //id("org.springframework.boot") } ... // applyFrom("dependencies.kts") 
  2. dependencies.kts debe renombrarse a dependencies.gradle.kts (y también a la reference)

  3. Dependiendo de la versión de Gradle que esté utilizando, kotlinModule("stdlib-jre8") podría estar obsoleto; kotlin("stdlib-jre8") se usa en el más reciente.
  4. Te faltan algunas configuraciones más en ese file en sí ( buildscript , repositories y, potencialmente, también plugins ).

     buildscript { repositories { //gradleScriptKotlin() mavenCentral() maven { setUrl("https://repo.spring.io/milestone") } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M2") classpath(kotlin("gradle-plugin")) } } apply { plugin("io.spring.dependency-management") //plugin("kotlin-jpa") //plugin("kotlin-spring") plugin("kotlin") plugin("org.springframework.boot") } repositories { //gradleScriptKotlin() mavenCentral() maven { setUrl("https://repo.spring.io/milestone") } } ... // ...your `dependencies` block here 

Observe que estoy usando spring-boot-gradle-plugin:2.0.0.M2 y el repo (s) de milestone ; es posible que esté utilizando una versión estable / anterior. Ajustar en consecuencia.

Eche un vistazo al soporte de lenguaje de Kotlin para los scripts de compilation de Gradle para algunos ejemplos; son ligeramente diferentes en lo que estás haciendo aquí, pero es posible que tengas un requisito para hacer cosas como esa.

  • ¿La base de código single Kotlin + libgdx se implementó en Android, escritorio y browser?
  • Lea la línea y agregue algo al final
  • Interoperabilidad de Kotlin-JS: uso de construcciones de lenguaje
  • Tienda lambda en una variable en kotlin
  • Proporcionar una instancia genérica en Kotlin & Guice
  • Usando lambda en BindingAdapter personalizado usando Android Databinding y Kotlin
  • ¿Es posible el cruce de intersecciones en Kotlin?
  • La configuration regional de Spring Boot Controller no cambia con el parámetro
  • ¿Por qué la variable no se puede inicializar correctamente en la function en línea como en Java?
  • Controlador para ejecutar tareas cada 5 segundos Kotlin
  • Inicio de session automático de Firebase para Android