Gradle KTS。如何将依赖项配置从主构建移动到单独的文件?

时间:2017-06-20 08:47:00

标签: gradle kotlin build.gradle.kts gradle-kotlin-dsl

我试图在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
  • 项目的Kotlin版本:1.1.2.5

当我在主文件中有依赖项时,我的构建工作正常。存在所有必要的配置(buildscript,插件,存储库等),但为简洁起见,此处省略。

1 个答案:

答案 0 :(得分:2)

这里有几件事:

  1. 我假设你在build.gradle.ktsapplyFrom("dependencies.kts")内没有任何内容;如果是这样,您仍然需要buildscriptplugins块:

    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. 您错过了该文件本身的其他设置(buildscriptrepositories,也可能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
    
  5.   

    请注意我使用spring-boot-gradle-plugin:2.0.0.M2milestone个回购邮件;您可能正在使用稳定版/先前版。相应地调整。

    查看Kotlin language support for Gradle build scripts中的一些例子;他们在这里做的事情略有不同,但你可能要求做这样的事情。