I have a multi-project build, and more often than not I find myself locking versions for artifacts across the board. So in my root project I define something like:
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
}
While I can use pkgVersions
anywhere, including other subprojects:
val pkgVersions by rootProject.extra
jooq {
version = pkgVersions["jooq"]
}
I am not able to do so inside a plugin block:
plugins {
kotlin("jvm") version pkgVersions["kotlin"]
}
Gives me the error "pkgVersions can't be called in this context by implicit receiver. Use the explicit one if required". I am assuming this is because the implicit receiver should probably be the file's JVM impression? But instead it is using PluginDependencySpec
. Trying an auto-complete with this@
shows only this@plugin
. This is just a long-shot guess from me. But, any pointers on what I am supposed to do?
Also, while we are at it, is there a way to create a global type in gradle-kotlin-dsl
, for instance:
data class MyBuildType(..)
and have it available everywhere WITHOUT using buildSrc
? It's pretty straightforward with buildSrc
and I don't mind using it, but just wondering.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…