Ces jours-ci, j'essaie d'écrire quelques codes pour découvrir les fonctionnalités réactives de Spring et l'extension kotlin dans Spring 5, et j'ai également préparé un gradot Kotlin DSL build.gradle.kt pour configurer la construction gradle.
Le build.gradle.kt
Est converti à partir des codes de modèle Spring Boot générés par http://start.spring.io .
Mais le ext
dans le buildscript
ne peut pas être détecté par Gradle.
buildscript {
ext { }
}
ext
provoquera une erreur de génération Gradle.
Pour que les variables dans classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
et compile("org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlinVersion")
fonctionnent, j'ai ajouté les variables de la manière la plus difficile.
val kotlinVersion = "1.1.4"
val springBootVersion = "2.0.0.M3"
Mais je dois les déclarer dans l'emplacement global supérieur et les dupliquer dans le buildscript
.
Code: https://github.com/hantsy/spring-reactive-sample/blob/master/kotlin-gradle/build.gradle.kts
Existe-t-il une approche gracieuse pour faire fonctionner ext
?
Mise à jour : Il existe quelques approches laides:
Dans l'exemple Gradle Kotlin DSL, https://github.com/gradle/kotlin-dsl/tree/master/samples/project-properties , déclare les propriétés dans gradel.properties.
kotlinVersion = 1.1.4
springBootVersion = 2.0.0.M3
Et utilisez-le dans build.gradle.kts.
buildScript{
val kotlinVersion by project
}
val kotlinVersion by project //another declare out of buildscript block.
Similaire avec ci-dessus les déclarer dans le bloc 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.
Comment éviter la duplication de val kotlinVersion: String par extra ?
Avec Kotlin DSL ext a été changé en extra et peut être utilisé sous buildscript.
Par exemple :-
buildscript {
// Define versions in a single place
extra.apply{
set("minSdkVersion", 26)
set("targetSdkVersion", 27)
}
}
Ce qui fonctionne pour moi, c'est d'utiliser ext
dans allprojects
au lieu de buildscript
, donc dans votre niveau supérieur build.gradle.kts
allprojects {
ext {
set("supportLibraryVersion", "26.0.1")
}
}
alors vous pouvez l'utiliser dans build.gradle.kts
fichiers dans des modules comme celui-ci:
val supportLibraryVersion = ext.get("supportLibraryVersion") as String
Propriétés globales dans kotlin-gradle-dsl:
https://stackoverflow.com/a/53594357/3557894
La version de Kotlin est intégrée dans kotlin-gradle-dsl.
Vous pouvez utiliser des dépendances avec une version intégrée comme suit:
implementation(embeddedKotlin("stdlib-jdk7"))
classpath(embeddedKotlin("gradle-plugin"))
Il y a une nouvelle possibilité avec Kotlin que nous pouvons utiliser:
object DependencyVersions {
const val JETTY_VERSION = "9.4.12.v20180830"
}
dependencies{
implementation("org.Eclipse.jetty:jettyserver:${DependencyVersions.JETTY_VERSION}")
}
Ici, DependencyVersions est un nom que j'ai choisi. Vous pouvez choisir un autre nom, comme "MyProjectVariables". C'est un moyen d'éviter d'utiliser les propriétés extra ou ext.