从 Spring-dependency-management 插件中拉取依赖版本

Pull Dependency version from Spring-dependency-management plugin

我有一个 Gradle Task 可以从项目中提取依赖项并使用该数据。下面是我的 Gradle Task

task gavValidation() {

    doLast {
        project(':app').configurations.each { 
            configurationType ->
            println "configurationType >>> "+configurationType.name
            configurationType.allDependencies.each {
                gav ->
                println gav.group+" : "+gav.name+" : "+gav.version
            }
        }
    }

}

print 语句在上面打印 gav.version 时始终显示为 null

我发现,这些依赖项的版本在 Spring Dependency Management 插件中维护。下面是片段

apply plugin: 'io.spring.dependency-management'
    dependencyManagement {
        imports {
            mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Edgware.RELEASE'
            mavenBom 'io.pivotal.spring.cloud:spring-cloud-services-dependencies:1.5.0.RELEASE'
            mavenBom 'org.springframework.boot:spring-boot-dependencies:1.5.13.RELEASE'

        }
        dependencies {
            dependency 'io.springfox:springfox-swagger2:2.8.0'
            dependency 'io.springfox:springfox-swagger-ui:2.8.0'

        }
    }

如何在我的自定义任务中获取版本?当前为 null

Working with Dependencies 中所述,方法 Configuration.getDependencies()Configuration.getAllDependencies() 仅 return 声明的依赖关系,不会触发依赖关系解析。因此,对于来自 Spring BOM 的依赖项,版本尚不清楚。

您可以使用Configuration.getResolvedConfiguration()方法代替,如下:

task gavValidation() {
    doLast {
        configurations.each { configurationType ->
            println " ***************** configurationType >>> " + configurationType.name
            if (configurationType.canBeResolved) {
                configurationType.getResolvedConfiguration().getResolvedArtifacts().each { artefact ->
                    ModuleVersionIdentifier id = artefact.getModuleVersion().getId()
                    println id.group + " : " + id.name + " : " + id.version
                }
            }
        }
    }
}