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

Gradle 格拉德尔KTS。如何将依赖项配置从主构建移动到单独的文件?,gradle,kotlin,build.gradle.kts,gradle-kotlin-dsl,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.boo

我正在尝试在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) }
}
这在以下情况下失败:

错误:在org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler类型的对象上找不到参数[stdlib-jre8]的方法kotlinModule()。
如果我尝试导入kotlinModule,它将失败,原因是:

错误:原因:启动失败:
脚本“/home/czar/personal/work/***/dependencies.kts”:1:无法解析类org.gradle.script.lang.kotlin.kotlinModule
@第1行第1列。
导入org.gradle.script.lang.kotlin.kotlin模块
^
1错误
我做错了什么,怎样做才对

版本和相关信息:

  • 格拉德尔:4.0
  • 渐变KTS:0.9.0
  • 编辑:IntelliJ U 2017.1.4
  • Kotlin插件:1.1.3 EAP
  • 项目的Kotlin版本:1.1.2.5

当我在主文件中有依赖项时,我的构建可以完美地工作。所有必要的配置(构建脚本、插件、存储库等)都有,但为了简洁起见,这里省略了这些配置。

这里有几点:

  • 我假设您在
    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")
    
  • dependencies.kts
    应重命名为
    dependencies.gradle.kts
    (以及参考)

  • 根据您使用的Gradle版本,kotlinModule(“stdlib-jre8”)可能已被弃用
    kotlin(“stdlib-jre8”)
    用于最新版本
  • 您缺少该文件本身的一些其他设置(
    buildscript
    存储库
    以及可能的
    插件

  • 请注意,我使用的是
    springbootgradle插件:2.0.0.M2
    milestone
    repo;您可能正在使用稳定/以前的版本。相应地调整


    看看其中的一些例子;他们对你在这里所做的事情略有不同,但你可能需要做这样的事情。

    嗨。谢谢你的详细答复。我在
    build.gradle.kts
    中有buildscript、插件、存储库、插件配置等,当依赖项块在所述文件中时,它就像一个符咒。我在gradle 4.0(KTS 0.9.0)上。文件的重命名在一定程度上起了作用,我现在遇到了不同的异常:
    错误:未找到名为“compile”的配置。
    顺便说一下,我也在启动2.0.0.M2:)和Kotlin 1.1.2-5…这就是为什么我说你还需要
    构建脚本
    存储库
    以及潜在的
    插件
    alsoyes,我有它们,但为了简单起见省略了,因为它们有效,我唯一的问题就是上面描述的那个。刚刚意识到,重命名文件实际上有效,我把applyFrom放错了地方。谢谢:)
    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