我们有多模块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时,我在settings.gradle.kts文件中得到Unresolved reference: Modules
。我发现它在migration guide中提到:
以前,buildSrc项目是在应用项目的设置脚本之前构建的,并且其类在脚本中可见。现在,在设置脚本及其类对它不可见之后,将构建buildSrc。 buildSrc类对于项目构建脚本和脚本插件仍然可见。
可以通过声明外部依赖项从设置脚本中使用自定义逻辑。
所以我知道是什么破坏了构建,并且可以通过使用settings.gradle.kts中的硬编码值来修复构建:
include(
":app",":base",":baz"
)
是否可以使用gradle 6.0避免这种重复?