Gradle KTS。如何将依赖项配置从主构建移动到单独的文件?
Gradle KTS. How to move dependencies configuration to a separate file from main build?
我正在尝试在 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
当我在主文件中有依赖项时,我的构建工作完美。所有必要的配置(构建脚本、插件、存储库等)都已存在,但为简洁起见此处省略。
这里有几件事:
我假设你里面什么都没有 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
、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
Notice I'm using spring-boot-gradle-plugin:2.0.0.M2
and the milestone
repo(s); you might be using a stable/prior version. Tweak accordingly.
查看 Kotlin language support for Gradle build scripts 中的一些示例;它们在您在这里所做的事情上略有不同,但您可能需要做那样的事情。
我正在尝试在 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
当我在主文件中有依赖项时,我的构建工作完美。所有必要的配置(构建脚本、插件、存储库等)都已存在,但为简洁起见此处省略。
这里有几件事:
我假设你里面什么都没有
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
、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
Notice I'm using
spring-boot-gradle-plugin:2.0.0.M2
and themilestone
repo(s); you might be using a stable/prior version. Tweak accordingly.
查看 Kotlin language support for Gradle build scripts 中的一些示例;它们在您在这里所做的事情上略有不同,但您可能需要做那样的事情。