如何使用Gradle以展平形式获取项目依赖项列表?

时间:2016-01-06 19:54:51

标签: gradle dependency-management

我知道Gradle有一个很好的dependencies任务,它列出了项目的所有依赖项。但是,它会在树列表中返回它们。

我想获得所有依赖项的列表,因为它们只是在一个平面列表中解析。与Maven依赖插件list目标的行为类似。

3 个答案:

答案 0 :(得分:11)

这是一项满足这种需求的简短任务:

task('dependenciesList') <<  {
    println "Compile dependencies"
    def selectedDeps = project.configurations.compile.incoming.resolutionResult.allDependencies.collect { dep ->
        "${dep.selected}"
    }
    selectedDeps.unique().sort().each { println it}
}

第三行是有趣的部分。您需要获得您关心的(编译)配置,然后获取依赖关系,incoming.resolutionResult将提供已解析的值和版本。

答案 1 :(得分:2)

你可以在linux或cygwin中使用sed | sort | uniq来展平deps树:

$ gradle dependencies | sed 's/^.* //' | sort | uniq

答案 2 :(得分:1)

感谢已经提供的答案。

最后,我以一种更标准的方式完成它:

project.gradle.addListener(new DependencyResolutionListener() {
    
    @Override
    void beforeResolve(ResolvableDependencies dependencies) {}
    
    @Override
    void afterResolve(ResolvableDependencies dependencies) {
        dependencies.resolutionResult.allComponents.each { select ->
            println "selected component: ${select} " + select.selectionReason
        }
    }
})

Project implementation也将以这种方式解决,最终选择的组件版本将得到正确解决。