Gradle 7引入了一个版本目录,通过它,我可以轻松地引用一个依赖项,例如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条答案
按热度按时间b4lqfgs41#
由于无法让
findDependency()
处理Gradle 7.3中已定义的libs
(它在7.2中有效),我在OP中使用了反射黑客。通过手动获取VersionCatalog
,我设法摆脱了该黑客:不过,我还是对其他的改进感兴趣。