it-swarm.com.de

ext in Buildscript kann von Gradle Kotlin DSL nicht erkannt werden

In diesen Tagen versuche ich, einige Codes zu schreiben, um die reaktiven Funktionen von Spring und die Kotlin-Erweiterung in Spring 5 zu erleben, und ich habe auch ein gradle Kotlin DSL build.gradle.kt vorbereitet, um den gradle-Build zu konfigurieren.

Der build.gradle.kt Wird aus Spring Boot-Vorlagencodes konvertiert, die von http://start.spring.io generiert wurden.

Aber das ext im buildscript kann von Gradle nicht erkannt werden.

buildscript {
  ext { }
}

Das ext verursacht einen Gradle-Build-Fehler.

Damit die Variablen in classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") und compile("org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlinVersion") funktionieren, habe ich die Variablen auf die harte Tour hinzugefügt.

val kotlinVersion = "1.1.4"
val springBootVersion = "2.0.0.M3"

Aber ich muss sie an der globalen Top-Position deklarieren und sie in buildscript duplizieren.

Code: https://github.com/hantsy/spring-reactive-sample/blob/master/kotlin-gradle/build.gradle.kts

Gibt es einen anmutigen Ansatz, um ext zum Laufen zu bringen?

Update : Es gibt einige hässliche Ansätze:

  1. Im Gradle Kotlin DSL-Beispiel deklariert https://github.com/gradle/kotlin-dsl/tree/master/samples/project-properties die Eigenschaften in gradel.properties.

    kotlinVersion = 1.1.4
    springBootVersion = 2.0.0.M3
    

    Und verwenden Sie es in build.gradle.kts.

    buildScript{
       val kotlinVersion by project
    
    }
     val kotlinVersion by project //another declare out of buildscript block.
    
  2. Ähnlich wie oben deklarieren Sie sie im buildScript-Block:

    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.
    

Wie kann ich die Duplizierung von val kotlinVersion: String durch extra vermeiden?

30
Hantsy

Mit Kotlin wurde DSL ext in extra geändert und kann unter Buildscript verwendet werden.

Z.B :-

buildscript {
    // Define versions in a single place
    extra.apply{
        set("minSdkVersion", 26)
        set("targetSdkVersion", 27)
    }
}
13
Shashi Bhushan

Was für mich funktioniert, ist die Verwendung von ext in allprojects anstelle von buildscript, also in Ihrer obersten Ebene build.gradle.kts

allprojects {
  ext {
    set("supportLibraryVersion", "26.0.1")
  }
}

dann können Sie es in build.gradle.kts - Dateien in Modulen wie diesen verwenden:

val supportLibraryVersion = ext.get("supportLibraryVersion") as String
7
kamil zych

Globale Eigenschaften in kotlin-gradle-dsl:
https://stackoverflow.com/a/53594357/3557894


Die Kotlin-Version ist in kotlin-gradle-dsl eingebettet.
Sie können Abhängigkeiten mit eingebetteter Version wie folgt verwenden:

implementation(embeddedKotlin("stdlib-jdk7"))

classpath(embeddedKotlin("gradle-plugin"))
3
aruy

Mit Kotlin gibt es eine neue Möglichkeit, die wir nutzen können:

object DependencyVersions {
    const val JETTY_VERSION = "9.4.12.v20180830"
}

dependencies{
    implementation("org.Eclipse.jetty:jettyserver:${DependencyVersions.JETTY_VERSION}")
}

Hier ist DependencyVersions ein Name, den ich gewählt habe. Sie können einen anderen Namen auswählen, z. B. "MyProjectVariables". Auf diese Weise können Sie die Verwendung der Eigenschaften extra oder ext vermeiden.