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

如何在Gradle 7及以上版本中编程获取Versions Catalogue所有已定义依赖

Gradle 版本目录依赖列表获取方案

Gradle 7推出了版本目录功能,只要在gradle/libs.versions.toml中完成依赖定义,就能通过类似libs.jacksonCore的形式便捷引用依赖,示例配置如下:

[versions]
jackson = "2.11.1"

[libraries]
jacksonCore = { module = "com.fasterxml.jackson.core:jackson-core", version.ref = "jackson" }

很多场景下需要通过编程方式获取所有已定义依赖列表,目前常用的反射方案虽然可用,但实现不够优雅,常见的Groovy DSL反射实现代码如下:

Map deps = libs.metaClass.methods
               .findAll { it.returnType.name.endsWith("provider.Provider") }
               .findAll { it.name.startsWith("get") }
               .collect { libs."$it.name"().get() }
               .collectEntries { [
                 (it.getModule().toString()): it.getVersionConstraint().toString()
               ] }

官方推荐优雅实现方案

Gradle 从7.4版本开始提供了官方的VersionCatalog API,可以直接获取所有已定义的依赖,无需反射。

Groovy DSL 实现

// 获取libs对应的版本目录实例
def catalog = project.extensions.getByType(VersionCatalogsExtension).named("libs")

// 遍历生成依赖映射关系
Map deps = catalog.libraries.collectEntries { lib ->
    [lib.get().module.toString(), lib.get().versionConstraint.toString()]
}

Kotlin DSL 实现

val catalog = the<VersionCatalogsExtension>().named("libs")
val deps = catalog.libraries.associate { lib ->
    lib.get().module.toString() to lib.get().versionConstraint.toString()
}

提示:如果使用的Gradle版本低于7.4,暂时只能通过反射方式实现,7.4及以上版本建议优先使用官方API,兼容性和稳定性更好。
除了依赖之外,你也可以调用对应API获取其他配置内容:

  • catalog.versions 遍历所有定义的版本号
  • catalog.plugins 遍历所有定义的插件
  • catalog.bundles 遍历所有定义的依赖组合包

内容的提问来源于stack exchange,提问作者neu242

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:15:03