Ich habe ein Multi-Projekt-Build, und meistens finde ich mich Locking-Versionen für Artefakte auf der ganzen Linie. Also in meinem Stammprojekt definiere ich so etwas wie:Ich kann keine zusätzlichen Projekteigenschaften im Plugin-Block verwenden
project.extra.set("pkgVersions", mapOf(
"kotlin" to "1.2.0",
"jooq" to "3.10.2"
))
val pkgVersions : Map<String, String> by project.extra
plugins {
base
kotlin("jvm") version "1.2.0" apply false
}
Während ich pkgVersions
überall, einschließlich anderen Teilprojekten verwenden kann:
val pkgVersions by rootProject.extra
jooq {
version = pkgVersions["jooq"]
}
ich nicht in der Lage bin so in einem Plugin-Block zu tun:
Gibt mir den Fehler "pkgVersions kann in diesem Kontext nicht von impliziten Empfänger aufgerufen werden. Verwenden Sie die explizite, falls erforderlich". Ich gehe davon aus, dass der implizite Empfänger wahrscheinlich die JVM-Impression der Datei ist? Aber stattdessen verwendet es PluginDependencySpec
. Wenn Sie eine automatische Vervollständigung mit [email protected]
versuchen, wird nur [email protected]
angezeigt. Dies ist nur eine langfristige Schätzung von mir. Aber, irgendwelche Hinweise darauf, was ich tun soll?
Auch wenn wir schon dabei sind, gibt es eine Möglichkeit, einen globalen Typen in gradle-kotlin-dsl
, zum Beispiel zu erstellen:
data class MyBuildType(..)
und hat es überall verfügbar OHNE buildSrc
mit? Es ist ziemlich einfach mit buildSrc
und ich habe nichts dagegen, es zu benutzen, aber ich frage mich nur.