Ich versuche, meine Build-Dateien wie in groovy zu organisieren, indem Sie Werte in einer separaten Datei wiederverwenden. Aber ich kann die Syntax nicht verstehen, um dasselbe im kotlin DSL zu machen.Wie werden zusätzliche Eigenschaften in der Kotlin DSL gesetzt?
Hier ist, was ich in root build.gradle.kts mit:
applyFrom("config.gradle.kts")
buildscript {
repositories {
google()
jcenter()
}
dependencies {
val test = project.extra["minSdkVer"]
classpath("com.android.tools.build:gradle:3.0.0-alpha4")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-5")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
und hier ist, was in den config.gradle.kts, auf die verwiesen wird:
mapOf(
Pair("minSdkVer", 22),
Pair("targetSdkVer", 25),
Pair("compiledSdkVer", 25),
Pair("buildToolsVer", "26-rc4")
).entries.forEach {
project.extra.set(it.key, it.value)
}
Aber es gibt eine Fehler:
Cannot get property 'minSdkVer' on extra properties extension as it does not exist
Kühl. Ich brauchte eine Sekunde, um herauszufinden, was Sie mit Scoping meinen. Das Anwenden von applyFrom() innerhalb des Buildscript-Blocks funktioniert. Es macht keinen vollständigen Sinn, da die project.extra nicht durch den ExtensionAware-Bereich betroffen sein sollte, oder? – Daykm
@Daykm, jetzt sehe ich, dass es in Ihrem Fall ein ganz anderes Problem gab: Gradle sammelt und führt die 'Buildscript' - Blöcke strikt vor allem anderen im Skript aus, also sollte die korrekte Lösung darin bestehen, ein anderes Skript im' 'anzuwenden Buildscript' Block und nicht außerhalb. – hotkey
@Daykm, aktualisierte die Antwort mit einer Erklärung. – hotkey