From Ограничения плагинов DSL :
Это требует, чтобы плагины были указаны таким образом, чтобы Gradle мог легко и быстро извлечь их, перед выполнением остальной части скрипта сборки . Это также требует, чтобы определение используемых подключаемых модулей было несколько статичным c.
Блок plugins {}
не поддерживает произвольный код. Он ограничен, чтобы быть идемпотентным (давать один и тот же результат каждый раз) и не иметь побочных эффектов (безопасно для Gradle для выполнения в любое время).
Фактически, ваш сценарий сборки оценивается по CompiledKotlinPluginsBlock
для блока plugins
и CompiledKotlinBuildScript
для остальных. Итак, this@Build_gradle
не всегда относится к одному и тому же объекту. Вы можете увидеть это, напечатав суперкласс в разных местах:
println(this@Build_gradle::class.java.superclass)
И, как оказалось, CompiledKotlinPluginsBlock
не имеет метода getGradle()
.
Замечательно знать, почему такое бывает, но найти решение было не так просто. Вы не можете добавить переменную за пределами plugins {}
, потому что она недостижима. Один из способов - иметь поле stati c в папке buildSrc
, но было бы странно нуждаться в нем только для этого.
Вот кое-что, что я обнаружил, что работает. В вашем root build.gradle.kts
добавьте:
plugins {
id("ru.vyarus.quality") version "4.3.0" apply false
}
project(":yourModule") {
if (gradle.gradleVersion < "6.0") {
apply(plugin = "ru.vyarus.qualit")
}
}
I wi sh старый способ apply(plugin =
не нужен, но это единственное решение, которое я нашел. Вам не нужно ничего особенного в вашем модуле plugins {}
.