ext в buildscript не может быть распознан Gradle Kotlin DSL
В эти дни я пытаюсь написать несколько кодов, чтобы испытать реактивные функции Spring и расширение kotlin в Spring 5, и я также подготовил сборку Kotlin DSL build.gradle.kt для настройки сборки сборки.
build.gradle.kt
конвертируется из кодов шаблонов Spring Boot, сгенерированных http://start.spring.io.
Но ext
в buildscript
не может быть обнаружен 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
работать?
Обновление: Есть несколько уродливых подходов:
-
На примере DSL Gradle Kotlin 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 //another declare out of buildscript block.
-
Аналогично описанному выше, объявите их в блоке buildScript:
buildScript{
extra["kotlinVersion"] = "1.1.4"
extra["springBootVersion"] = "2.0.0.M3"
val kotlinVersion: String by extra
}
val kotlinVersion: String by extra//another declare out of buildscript block.
Как я могу избежать дублирования val kotlinVersion: String на extra?
Ответы
Ответ 1
С Kotlin DSL ext был изменен на extra, и его можно использовать в buildscript.
Например: -
buildscript {
// Define versions in a single place
extra.apply{
set("minSdkVersion", 26)
set("targetSdkVersion", 27)
}
}
Ответ 2
То, что работает для меня, - это использование ext
во всех allprojects
а не buildscript
, поэтому в вашем top-level build.gradle.kts
allprojects {
ext {
set("supportLibraryVersion", "26.0.1")
}
}
то вы можете использовать его в файлах build.gradle.kts
в таких модулях:
val supportLibraryVersion = ext.get("supportLibraryVersion") as String
Ответ 3
Глобальные свойства в kotlin-gradle-dsl:
fooobar.com/questions/14806940/...
Версия Kotlin встроена в Kotlin-Gradle-DSL.
Вы можете использовать зависимости со встроенной версией следующим образом:
implementation(embeddedKotlin("stdlib-jdk7"))
classpath(embeddedKotlin("gradle-plugin"))
Ответ 4
В Kotlin появилась новая возможность, которую мы можем использовать:
object DependencyVersions {
const val JETTY_VERSION = "9.4.12.v20180830"
}
dependencies{
implementation("org.eclipse.jetty:jettyserver:${DependencyVersions.JETTY_VERSION}")
}
Здесь DependencyVersions - это имя, которое я выбрал. Вы можете выбрать другое имя, например "MyProjectVariables". Это способ избежать использования дополнительных или дополнительных свойств.