web-dev-qa-db-fra.com

ext dans buildscript ne peut pas être reconnu par Gradle Kotlin DSL

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:

  1. 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.
    
  2. 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 ?

19
Hantsy

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)
    }
}
13
Shashi Bhushan

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
7
kamil zych

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"))
3
aruy

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.

3