如何在Gradle多项目构建中打印出所有依赖项?

22

我有一个Gradle多项目构建,其中包含通用定义的主目录和通过 include 语句在 settings.gradle 中定义的一些项目。

构建、测试、运行都很正常,但是使用任务 dependencies 显示依赖关系无法工作,它只会输出:

$ g dependencies
master
:dependencies

------------------------------------------------------------
Root project
------------------------------------------------------------

No configurations

BUILD SUCCESSFUL

在主目录中执行 gradle :project1:dependencies 可以按预期运行。

我该如何让Gradle打印出包括所有第三方库的整个依赖树,以及包含在其中的所有项目?


Gradle这么基本的功能居然没有!而且问题还更深层次 - 你可以编写更复杂的构建,但是你得到的却更少。 - undefined
这个回答解决了你的问题吗?我能使用Gradle获取所有子项目的依赖树吗? - undefined
3个回答

24

很遗憾,您必须指定自己的任务:

allprojects {
    task printAllDependencies(type: DependencyReportTask) {}
}

然后执行: ./gradlew printAllDependencies
如果您不想查看根项目的依赖关系,请将此任务放在subprojects块中。

subprojects {
    task printSubDependencies(type: DependencyReportTask) {}
}
假设您需要找到特定的依赖项。在这种情况下,您可以使用dependencyInsight任务的功能。
subprojects {
    task findDependency(type: DependencyInsightReportTask) {}
}

然后运行

./gradlew findDependency --configuration compile --dependency spring-data-jpa

8
下一个任务怎么办呢?我们可以创建一个自定义任务,并将其应用于所有项目,并使其依赖于dependencies任务。以下是一个示例:
allprojects { currProject ->
    task printDependencies {
        dependsOn 'dependencies'
    }
}

然后我们可以使用./gradlew printDependencies打印出所有模块的依赖关系。

4

我不知道有任何内置任务可以做到这一点。您可能需要创建一个自定义任务,就像这样:

task ('showAll') {
doLast {
   allprojects.each {
       println(it.name+':')
       println('-compile:')
        configurations.compile.each {
            c ->
             println('   '+c.name)
        }
       println '-testCompile:'
       configurations.testCompile.each {
           r->
           println('   '+ r.name)
       }
    }
}
}

我的项目输出:

:showAll
工具:
-编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
-测试编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
   junit-4.11.jar
   hamcrest-core-1.3.jar
会计:
-编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
-测试编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
   junit-4.11.jar
   hamcrest-core-1.3.jar
Jace:
-编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
-测试编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
   junit-4.11.jar
   hamcrest-core-1.3.jar
Bash:
-编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
-测试编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
   junit-4.11.jar
   hamcrest-core-1.3.jar
CSS:
-编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
-测试编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
   junit-4.11.jar
   hamcrest-core-1.3.jar
FXCSS:
-编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
-测试编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
   junit-4.11.jar
   hamcrest-core-1.3.jar
Gradle:
-编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
-测试编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar
   commons-io-2.5.jar
   commons-collections4-4.1.jar
   jsoup-1.10.2.jar
   junit-4.11.jar
   hamcrest-core-1.3.jar
Groovy:
-编译:
   groovy-all-2.4.9.jar
   commons-lang3-3.5.jar


1
谢谢您的建议,但不幸的是它并不包括传递依赖项。通常我试图找到那些会带入我不想要的东西的传递依赖项问题。 - centic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接