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 inferencia tipo Kotlin falla para la guayaba TreeMultimap
  • Extraña java.lang.ClassCastException al usar la llamada
  • Segundo ctor vacío en Kotlin
  • Obtener una URL en Android Kotlin de forma asíncrona
  • Clases de datos de Kotlin: por qué toString () exporta properties privadas
  • Comportamiento extraño de Firebase Dejó de acceder a la networking
  • Kotlin equivalente nativo de Retrofit
  • Definir la function global en Kotlin que se utilizará en el file html para usar como retrollamada onclick
  • Kotlin: ProGuard borra attributes de properties
  • Poniendo un lambda genérico en un map
  • Rasgos de Kotlin y retroadaptación