У нас есть многомодульное приложение для Android с логикой сборки, написанной на gradle kotlin dsl. Мы используем buildSrc для извлечения общей логики, такой как версии зависимостей. У нас есть что-то вроде:
buildSrc/src/main/kotlin/Dependencies.kt
:
object Versions {
const val fooVersion = "1.2.3"
const val barVersion = "4.5.6"
}
object Libraries {
val foo = "com.example.foo:foo:$fooVersion"
val bar = "com.example.bar:bar:$barVersion"
}
object Modules {
const val app = ":app"
const val base = ":base"
const val baz = ":baz"
}
Затем мы можем использовать их в блоке dependencies
модулей, чтобы избежать жестко запрограммированных / дублированных значений:
app/build.gradle.kts
:
dependencies {
implementation(Libs.foo)
implementation(Libs.bar)
implementation(project(Modules.base))
implementation(project(Modules.baz))
}
И мы также используем его в settings.gradle.kts:
settings.gradle.kts
:
include(
Modules.app,
Modules.base,
Modules.baz
)
Это нормально работает с Gradle 5.6. Когда я обновляюсь до 6.0, я получаю Unresolved reference: Modules
в файле settings.gradle.kts. Я обнаружил, что это упомянуто в руководстве по миграции:
Раньше проект buildSrc создавался до применения скрипта настроек проекта, и его классы были видны внутри скрипта. Теперь buildSrc создается после скрипта настроек, и его классы ему не видны. Классы buildSrc остаются видимыми для сценариев сборки проекта и подключаемых модулей сценариев.
Пользовательскую логику можно использовать из скрипта настроек, объявив внешние зависимости.
Итак, я знаю, что сломало сборку, и могу исправить ее, используя жестко запрограммированные значения в settings.gradle.kts:
include(
":app",
":base",
":baz"
)
Можно ли избежать этого дублирования с помощью Gradle 6.0?