Android项目配置buildSrc从libs.versions.toml生成libs失败求助
我正在研究在当前Android项目中使用buildSrc,已创建buildSrc文件夹并定义了可在项目gradle kts文件中正常使用的Config常量:
object Config { object App { const val nameHeader = "APPLICATION_NAME" const val name = "Android My App" const val packageName = "org.research.development" } const val minSdk = 21 const val targetSdk = 34 val javaVersion = org.gradle.api.JavaVersion.VERSION_17 }
现在我希望通过以下修改,利用已有的libs.versions.toml生成buildSrc模块的libs文件夹:
buildSrc/build.gradle.kts
import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { `kotlin-dsl` } repositories { mavenCentral() } java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) languageVersion.set(KotlinVersion.KOTLIN_2_0) } }
buildSrc/settings.gradle.kts
dependencyResolutionManagement { repositories { google() mavenCentral() } versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } } } rootProject.name = "buildSrc"
但执行同步、清理和构建操作后,libs文件夹仍然为空。请问是我的预期有误,还是遗漏了关键配置技巧?
首先你的预期存在偏差:通过versionCatalogs引用libs.versions.toml并不会自动生成物理的libs文件夹。Gradle的版本目录是逻辑层面的依赖声明抽象,不会在buildSrc下创建实体文件夹。你需要在buildSrc中直接引用这个逻辑目录的依赖,而非等待生成物理文件夹。
关键配置和使用步骤如下:
确认根目录依赖声明:确保项目根目录
gradle/libs.versions.toml已正确声明依赖,示例:[versions] kotlin = "2.0.0" android-gradle-plugin = "8.5" [libraries] kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } android-gradle = { module = "com.android.tools.build:gradle", version.ref = "android-gradle-plugin" }在buildSrc中添加依赖:修改
buildSrc/build.gradle.kts,通过libs目录引入所需依赖:dependencies { // 引用libs.versions.toml中声明的依赖 implementation(libs.kotlin.stdlib) implementation(libs.android.gradle) }在buildSrc代码中使用依赖:配置完成后,即可在Config类或其他buildSrc代码中直接使用这些依赖提供的API,比如Android Gradle相关类。
同步项目:重新同步Gradle,buildSrc会自动解析
libs.versions.toml中的依赖,这些依赖会存储在Gradle全局缓存中,不会在buildSrc目录下生成实体文件夹。
补充说明:
- 你当前的
buildSrc/settings.gradle.kts配置是正确的,已成功关联根目录的libs.versions.toml - buildSrc作为独立Gradle子项目,其依赖由自身的build.gradle.kts声明,同步后依赖会被Gradle后台管理,不会显示在buildSrc本地文件夹中
内容的提问来源于stack exchange,提问作者Hector

