如何在Gradle Kotlin多模块构建的子项目中使用版本目录?
解决Gradle子项目中无法访问版本目录
libs的问题 问题根源
你在settings.gradle.kts的subprojects闭包中配置依赖的方式有误——settings.gradle.kts的核心作用是定义项目结构(比如包含哪些子项目),执行时机早于项目构建脚本,此时子项目的类型安全版本目录访问器libs还未被注入到项目上下文,因此会报“Extension with name 'libs' does not exist”错误。
修复步骤
1. 调整配置位置
将settings.gradle.kts中subprojects内的构建配置(插件应用、Java版本设置、依赖声明)全部迁移到**根项目的build.gradle.kts**中。
修改后的settings.gradle.kts(仅保留项目结构相关内容)
// 只保留子项目引入等结构配置,移除原有的subprojects构建逻辑 include("your-subproject-1", "your-subproject-2") // 其他settings层面的配置...
根项目build.gradle.kts中的subprojects配置
subprojects { // 应用所需插件 apply(plugin = "groovy") apply(plugin = "java-library") apply(plugin = "ch.onstructive.gradle.release") apply(plugin = "ch.onstructive.gradle.codestyle") // 配置Java版本 configure<JavaPluginExtension> { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } // 声明依赖(此时libs已可用) dependencies { annotationProcessor(libs.mapstruct.processor) implementation(libs.mapstruct) } }
2. 确认版本目录配置有效性
你的gradle/libs.versions.toml配置是正确的,无需修改:
[versions] mapstructVersion = "1.5.5.Final" [libraries] mapstruct-processor = { module = "org.mapstruct:mapstruct-processor", version.ref = "mapstructVersion" } mapstruct = { module = "org.mapstruct:mapstruct", version.ref = "mapstructVersion" }
额外说明
如果使用Gradle 7.3及更早版本,需要在settings.gradle.kts中手动开启版本目录特性:
enableFeaturePreview("VERSION_CATALOGS")
Gradle 7.4+版本默认已开启该特性,无需额外配置。
内容的提问来源于stack exchange,提问作者saw303
相关产品推荐
相关产品推荐

