Gradle列表本地项目依赖项

时间:2019-02-19 05:52:23

标签: gradle dependencies

我具有以下项目结构:

root
- A
- B
    - B1
    - B2
- C

B1取决于B2和A。B2也取决于A和C。所有这些项目还具有从中央存储库下载的外部依赖项。

是否有gradle任务来获取所有本地依赖项(可传递)?我想要某种

B1
- A
- B2
  - A
  - C

最好是平坦的,没有重复。也可以省略项目本身,这并不重要。 注意:没有显示来自中央存储库的依赖项

这样的任务存在吗?

1 个答案:

答案 0 :(得分:1)

gradle有几种检查依赖项的方法,但我认为其中没有任何一个过滤器将其限制为仅“项目”依赖项。参见https://docs.gradle.org/current/userguide/userguide_single.html#sec:listing_dependencies

还请注意,项目具有不同的依赖项配置,其中每个配置都有其自己的依赖项集。

因此,您需要谈谈有关显示项目的所有“编译”依赖项的情况。

但是gradle的一大优点是它很容易用groovy编写脚本。

该快速草稿对我有用,以显示“编译”配置中的所有依赖项。 只需将其添加到根项目中,然后调用“ gradlew projectDependencies”。 这已经在一个示例项目中进行了测试(换句话说,“未经测试”),并且不是很灵活(“编译”配置是硬编码的)。 但是,我尝试通过使用显式类型和多行代码使其易于理解,以便您可以对其进行扩展:

task projectDependencies {
    doLast {
        showProjectDependencies(rootProject, 0)
    }
}

def showProjectDependencies(Project project, int nesting) {
    ConfigurationContainer configurations = project.configurations
    Configuration configuration = configurations.compile
    println " " * (3 * nesting) + project.name
    DomainObjectSet<ProjectDependency> projectDependencies = configuration.dependencies.withType ProjectDependency
    projectDependencies.forEach {
        showProjectDependencies(it.dependencyProject, nesting + 1)
    }
}