【问题标题】:Getting a list of all dependencies in the Versions Catalogue from Gradle v7+从 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()
               ] }

【问题讨论】:

    标签: gradle gradle-dependencies


    【解决方案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()]
                   }
    

    不过,我仍然对其他改进感兴趣。

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 2021-02-15
      • 2012-05-09
      • 2013-06-28
      • 2016-11-29
      • 1970-01-01
      • 2011-09-01
      相关资源
      最近更新 更多