Градл КТС. Как перенести конфигурацию зависимостей в отдельный файл из основной сборки?

Я пытаюсь создать модульный скрипт сборки в kotlin. В основном основной скрипт и скрипт зависимостей. в build.gradle.kts у меня есть:

applyFrom("dependencies.kts")

и в dependencies.kts у меня есть фактические зависимости:

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

Это не с:

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

Если я пытаюсь импортировать kotlinModule, он не работает с:

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

Что я делаю не так и как это сделать правильно?

Версии и соответствующая информация:

  • Gradle: 4.0
  • Gradle KTS: 0,9,0
  • редактор: IntelliJ U 2017.1.4
  • Плагин Kotlin: 1.1.3 EAP
  • Котлин версия для проекта: 1.1.2.5

Моя сборка работает отлично, когда у меня есть зависимости в основном файле. Все необходимые конфигурации (buildscript, плагины, репозитории и т. Д.) Присутствуют, но здесь для краткости опущены.

1 ответ

Решение

Пара вещей здесь:

  1. Я предполагаю, что у вас ничего нет внутри build.gradle.kts но applyFrom("dependencies.kts"); если это так, вам все еще нужно buildscript а также 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"))
      }
    }
    
    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 следует переименовать в dependencies.gradle.kts (а также ссылка)

  3. В зависимости от используемой версии Gradle kotlinModule("stdlib-jre8") может быть уже устарела; kotlin("stdlib-jre8") используется в самой последней.
  4. Вам не хватает еще некоторых настроек в этом файле (buildscript, repositories и потенциально 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
    

Обратите внимание, я использую spring-boot-gradle-plugin:2.0.0.M2 и milestone репо (с); Возможно, вы используете стабильную / предыдущую версию. Твик соответственно.

Взгляните на поддержку языка Kotlin для скриптов сборки Gradle для некоторых примеров; они немного отличаются от того, что вы делаете здесь, но у вас может быть требование делать подобные вещи.

Другие вопросы по тегам