You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 18:45:12