我有一个多项目构建,而且我经常发现自己锁定了所有版本的工件。所以在我的根项目中,我定义了类似的东西:
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
}
虽然我可以pkgVersions
在任何地方使用,包括其他子项目:
val pkgVersions by rootProject.extra
jooq {
version = pkgVersions["jooq"]
}
我无法在插件块内这样做:
plugins {
kotlin("jvm") version pkgVersions["kotlin"]
}
给我错误“隐式接收器在此上下文中无法调用 pkgVersions。如果需要,请使用显式接收器”。我假设这是因为隐式接收器可能应该是文件的 JVM 印象?但相反,它正在使用PluginDependencySpec
. this@
尝试使用仅显示的自动完成this@plugin
。这只是我的一个长期猜测。但是,关于我应该做什么的任何指示?
此外,当我们这样做时,有没有办法在 中创建全局类型,gradle-kotlin-dsl
例如:
data class MyBuildType(..)
并且在不使用的情况下随处可用buildSrc
?它非常简单,buildSrc
我不介意使用它,但只是想知道。