build.gradle.kt是从http://start.spring.io生成的Spring Boot模板代码转换而来。
但是在buildscript中的ext无法被Gradle检测到。
buildscript {
ext { }
}
ext
会导致Gradle构建错误。
为了使classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
和compile("org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlinVersion")
中的变量生效,我以困难的方式添加了这些变量。
val kotlinVersion = "1.1.4"
val springBootVersion = "2.0.0.M3"
但是我必须在全局顶级位置声明它们,并在
buildscript
中复制它们。代码:https://github.com/hantsy/spring-reactive-sample/blob/master/kotlin-gradle/build.gradle.kts 有没有一种优雅的方法使
ext
起作用?更新:有一些不太好看的方法:
从Gradle Kotlin DSL示例https://github.com/gradle/kotlin-dsl/tree/master/samples/project-properties中,声明了gradel.properties中的属性。
kotlinVersion = 1.1.4 springBootVersion = 2.0.0.M3
并在build.gradle.kts中使用它。
buildScript{ val kotlinVersion by project
} val kotlinVersion by project //另一个在buildscript块之外声明的属性。
与上述类似,在buildScript块中声明它们:
buildScript{ extra["kotlinVersion"] = "1.1.4" extra["springBootVersion"] = "2.0.0.M3" val kotlinVersion: String by extra
} val kotlinVersion: String by extra //另一个在buildscript块之外声明的属性。
我怎样避免val kotlinVersion: String by extra的重复?
更新(2023-7-5):最新的Gradle支持使用libs.versions.toml
文件在一个集中的位置声明依赖版本,它也可以被GitHub dependabot识别。详情请参见:https://docs.gradle.org/current/userguide/platforms.html
extra["kotlinVersion"] = "1.1.4" val kotlinVersion: String by extra
变成val kotlinVersion: String by extra("1.1.4")
- Claus Holst