从 Gradle v7+ 获取版本目录中所有依赖项的列表
Posted
技术标签:
【中文标题】从 Gradle v7+ 获取版本目录中所有依赖项的列表【英文标题】:Getting a list of all dependencies in the Versions Catalogue from Gradle v7+ 【发布时间】:2021-12-23 02:53:11 【问题描述】:Gradle 7 引入了 [版本目录][1]。有了它,我可以轻松地将依赖项称为例如libs.jacksonCore
如果在gradle/libs.versions.toml
中定义:
[versions]
jackson = "2.11.1"
[libraries]
jacksonCore = module = "com.fasterxml.jackson.core:jackson-core", version.ref = "jackson"
但是有没有办法以编程方式获取所有已定义依赖项的列表?
现在我在 libs
对象(属于 org.gradle.accessors.dm.LibrariesForLibs
类)上使用反射作为解决方法,但这真的很难看:
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()
]
【问题讨论】:
【参考方案1】:我在 OP 中使用了反射破解,因为我无法让 findDependency()
处理 Gradle 7.3 中已经定义的 libs
(它在 7.2 中有效)。通过手动获取VersionCatalog
,我设法摆脱了黑客攻击:
def libz = rootProject.extensions
.getByType(VersionCatalogsExtension).named("libs")
def deps = libz.getDependencyAliases()
.collect libz.findDependency(it).get().get()
.collectEntries
[(it.getModule().toString()): it.getVersionConstraint().toString()]
不过,我仍然对其他改进感兴趣。
【讨论】:
以上是关于从 Gradle v7+ 获取版本目录中所有依赖项的列表的主要内容,如果未能解决你的问题,请参考以下文章