У меня многопроектная сборка, и чаще всего я блокирую версии для артефактов по всем направлениям. Итак, в моем корневом проекте я определяю что-то вроде:
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
, и я не против его использования, просто интересно.