使用gradle查找依赖树

use*_*701 474 gradle

是否有可能使用gradle来生成依赖于什么的树?

我有一个项目,并希望找出所有的依赖项,所以我可以通过前向声明等来修剪它.

Cha*_*ham 547

对于Android,请使用此行

 gradle app:dependencies
Run Code Online (Sandbox Code Playgroud)

或者如果你有一个gradle包装器:

./gradlew app:dependencies
Run Code Online (Sandbox Code Playgroud)

app你的项目模块在哪里

另外,如果你想检查某些东西是否compiletestCompilevs androidTestCompile依赖以及拉入的内容:

./gradlew :app:dependencyInsight --configuration compile --dependency <name>
./gradlew :app:dependencyInsight --configuration testCompile --dependency <name>
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>
Run Code Online (Sandbox Code Playgroud)

  • 啊,我不得不把模块名称放在那里.那就是为什么......谢谢! (6认同)
  • 我也不知道项目模块(这个遗留项目有一个非常奇怪的结构)。但是这个命令帮助了我 `./gradlew -q dependency :dependencies` 它会查看您的所有文件夹:P (3认同)
  • 实际上`./gradlew:dependencies`可以工作。它将列出所有项目的依赖项,但是很容易找到合适的依赖项。 (2认同)
  • 在使用 Gradle 包装器 `./gradlew dependency` 的非 Android 项目上,可以正常工作(而 `./gradlew app:dependency` 则给出以下失败/异常“在根项目 'spring-petclinic' 中找不到项目 'app'。” (2认同)

Ben*_*hko 217

您可以使用该命令呈现依赖关系树gradle dependencies.有关更多信息,请查看11.6.4在线用户指南中列出项目依赖项部分.

  • 您可以使用gradle:project:dependencies获取特定项目的依赖项 (6认同)
  • @Nilzor您可能正在错误的目录中执行该命令(不包含`build.gradle`文件),或者您的构建文件不应用任何插件. (3认同)
  • 当我使用Android项目执行此操作时,我得到的只是以下输出:http://pastebin.com/fHFigAuY建议? (2认同)
  • [Android Studio插件 - Gradle View](https://github.com/rholder/gradle-view)分析依赖关系. (2认同)
  • 如果使用包装器:`./gradlew依赖项` (2认同)

Dev*_*str 133

如果您发现难以导航控制台输出gradle dependencies,您可以添加项目报告插件:

apply plugin: 'project-report'
Run Code Online (Sandbox Code Playgroud)

并使用以下方法生成HTML报告:

$ ./gradlew htmlDependencyReport
Run Code Online (Sandbox Code Playgroud)

报告通常可以在 build/reports/project/dependencies/index.html

它看起来像这样: 在此输入图像描述

  • 这不适用于多模块项目。我只看到空列表。 (3认同)
  • 很棒的发现。插件实际上做了更多的事情 https://docs.gradle.org/current/userguide/project_report_plugin.html (3认同)
  • 模块支持? (2认同)
  • 对我来说,这只是`gradle htmlDependencyReport` (2认同)
  • 非常感谢您的出色发现。 (2认同)
  • 如果默认情况下可以扩展列表以进行快速搜索,那就太好了。否则可以在 Chrome 控制台上查看 html 并搜索.. (2认同)
  • @lorraine 它可以创建纯文本报告“gradle dependencyReport” (2认同)

Nic*_*sco 76

在Android Studio中(至少从v2.3.3开始),您可以直接从UI运行命令:

单击Gradle选项卡,然后双击:yourmodule - > Tasks - > android - > androidDependencies

树将显示在Gradle Console选项卡中

一张图片胜过千言万语

  • @Tom在“帮助”类别下而不是“ android”类别下运行“依赖”任务。它显示为树 (5认同)
  • 我发现这会在AS 3.2.0中创建一个平面列表,而不是树。但是,命令行变体会创建一棵树。 (2认同)

Dav*_*son 26

通常,完整的test,compileandroidTestCompile依赖图实在是太多了一起检验.如果您只想要compile依赖图,则可以使用:

./gradlew app:dependencies --configuration compile
Run Code Online (Sandbox Code Playgroud)

资料来源:Gradle docs 4.7.6

注意:compile在较新版本的Gradle中已弃用,在较新版本中,建议您将所有compile依赖项转移到implementation.请在这里看到这个答案

  • 只是注意:编译已被弃用,人们现在应该转向实施 (4认同)
  • 您还可以使用 `:dependencies` 代替 `app:dependencies`。 (2认同)

Dup*_*ngh 26

对我来说,这只是一个命令

build.gradleplugin

apply plugin: 'project-report'
Run Code Online (Sandbox Code Playgroud)

然后转到cmd并运行以下命令

./gradlew htmlDependencyReport
Run Code Online (Sandbox Code Playgroud)

这给了我一个 HTML 报告 WOW Html 报告


或者,如果您想要报告中的text file, 使搜索更容易使用以下命令

gradlew dependencyReport
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这就是我的主。

  • 很好的答案!以防万一,对于某些人来说,生成的“html”文件将在“build/reports/project/dependencies/root.html”中找到并不明显 (2认同)

Dav*_*uel 22

如果要在图形中可视化依赖关系,可以使用gradle-dependency-graph-generator插件.

通常,此插件的输出可以在build/reports/dependency-graph目录中找到,如果您使用的是0.5.0版本的插件,它包含三个文件(.dot | .png | .svg).

真实应用程序(国际象棋时钟)中依赖图的示例:

图形

  • * 出了什么问题:任务“:generateDependencyGraph”执行失败。&gt; 无法调用“com.kitfox.svg.SVGDiagram.setIgnoringClipHeuristic(boolean)”,因为“diagram”为空 (2认同)

Rem*_*emy 12

对于Android,在终端中输入

gradlew app:dependencies
Run Code Online (Sandbox Code Playgroud)

它将列出所有依赖项以及具有较新版本的依赖项,供您升级,例如

com.android.support:customtabs:26.1.0 -> 27.1.1 (*)
Run Code Online (Sandbox Code Playgroud)

  • 不,恐怕有关“(*)”的部分是错误的。`(*)` 意味着此依赖项声明使用前者(26.1.0),但实际上构建将使用后者版本(27.1.1)[这个答案](/sf/answers/2396184171/)谈到了这个。 (4认同)

Sou*_*khi 11

对于 Gradle 的最新版本(我使用 6.4.1 版本进行了测试):

gradle dependencies --configuration compileClasspath
Run Code Online (Sandbox Code Playgroud)

或者如果您使用 Gradle Wrapper:

gradlew dependencies --configuration compileClasspath
Run Code Online (Sandbox Code Playgroud)

使用 'debug' 和 'release' 编译配置文件为 Android 构建时,可以使用debugCompileClasspathreleaseCompileClasspath配置代替compileClasspath.


try*_*man 9

Gradle的情况已经向前发展,所以我相信这个问题值得另一个答案。
从Gradle 4.3开始,引入了“ 构建扫描 ”。所有相关信息是在摇篮文档(可12)。对我来说,这似乎是以一种清晰,有组织的方式检查依赖关系(通常是您的构建)的最简单方法。

它们非常易于创建,只需执行即可:

gradle build --scan  
Run Code Online (Sandbox Code Playgroud)

(或者./gradlew build --scan如果您使用包装器)

这将产生一个随机生成的链接,您可以在其中查看扫描结果。打开该链接时,您输入电子邮件并完全控制该链接:例如。分享或删除它。它有很多有关构建的信息,而不仅仅是依赖关系。您可以看到您的依赖关系,它们的层次结构,用于获取它们的存储库,以及有关构建的许多其他内容,即其性能(大型复杂构建中很重要的性能),测试,甚至控制台输出和系统配置,使用的是JDK和JVM,最大堆大小等。

这是来自模拟项目的打印屏幕:

构建扫描示例

构建扫描是构建的可共享记录,可提供有关发生情况和原因的见解。您可以在scans.gradle.com上免费创建构建扫描。

但是请注意,构建过程的信息将发送到Gradle服务器。完成检查后,可以完全删除它。

最后,您也可以对Gradle 4.3之前的版本使用构建扫描,只需在您的构建脚本中手动添加扫描插件即可。

编辑
从评论中吸收一些额外的注释反馈:
1)很难错误地执行此操作,或者在不了解您的构建的某些信息将在线的情况下(对您来说是私有的,可以删除它,但是仍然在线) )。

执行时gradle build --scan出现以下消息:

Publishing a build scan to scans.gradle.com requires accepting the Gradle
Terms of Service defined at https://gradle.com/terms-of-service. Do you
accept these terms? [yes, no]
Run Code Online (Sandbox Code Playgroud)

您必须显式编写yes,然后消息继续:

Publishing build scan...  
https://gradle.com/s/a12en0dasdu
Run Code Online (Sandbox Code Playgroud)

2)在Gradle Enterprise中,您可以在自己的服务器中托管gradle构建扫描。但是我对此没有经验,我提出的方法是关于标准Gradle分发,使用Gradle的服务器进行构建扫描。

3)Gradle本身促进了构建扫描,以此作为解决大多数构建问题的方法。

  • 抱歉,我不愿意回答这个问题,但是IMO并没有回答问题,也没有足够清楚地警告您,通过`gradle build --scan`您可以在Internet上的某个位置发布构建的详细信息-并删除它,您必须将其与工作中的e相关联-邮件地址。 (4认同)
  • 我还没有尝试过 - 感谢您澄清接受条款。我删除了我的 -1。 (4认同)
  • 嘿 Michal,如果您有这种感觉,欢迎您投反对票。不过我想问一下,你试过吗?在 cmd 中执行 `gradle build --scan` 时,会提示您:`将构建扫描发布到 scans.gradle.com 需要接受 https://gradle.com/terms-of-service 中定义的 Gradle 服务条款。你接受这些条款吗?[是,否]`。您必须手动编写“是”。紧接着,您会收到消息:`Publishing build scan... https://gradle.com/s/a12en0dasdu`(随机放置相同类型的链接)。所以我相信它之前确实警告过你。(1/2) (2认同)
  • 您可以访问该链接并立即删除扫描,无需电子邮件或任何内容。作为答案,我相信它**确实回答了这个问题**。事实上,与其他方法相比,它向您显示了关于您的依赖项的额外信息(并且更进一步:整个构建的额外信息)。如果您不喜欢它,那完全没问题,但(据我所知)它是目前最全面的工作工具,因此牢记它是很有价值的。最后,它是由 Gradle 自己推广的,字面上是他们的 [第一指南](https://gradle.org/guides/) (2/2) (2认同)

小智 7

在Android Studio中

1)打开终端并确保您位于项目的根文件夹中.

2)运行./gradlew app:dependencies (如果不使用gradle包装器,请尝试 gradle app:dependencies)

请注意,运行./gradle dependencies只会为您提供项目根文件夹的依赖关系树,因此以上述方式提及应用程序,即 ./gradlew app:dependencies非常重要.


Chr*_*lma 5

我还发现运行此命令很有用:

./gradlew dI --dependency <your library>
Run Code Online (Sandbox Code Playgroud)

这显示了如何解决依赖关系(dependencyInsight),并帮助您调试需要在哪里强制或排除库中的内容build.gradle

请参阅:https//docs.gradle.org/current/userguide/tutorial_gradle_command_line.html


林果皞*_*林果皞 5

请注意,./gradlew <module_directory>:<module_name>:dependencies如果模块在到达build.gradle之前有额外的目录,则可能需要执行某些操作.如有疑问,请./gradlew tasks --all检查名称.


cod*_*rer 5

如果您希望所有依赖项都在一个文件中,最后只需两步即可。将其添加到build.gradle.kts项目的根目录中:

project.rootProject.allprojects {
    apply(plugin="project-report")

    this.task("allDependencies", DependencyReportTask::class) {
        evaluationDependsOnChildren()
        this.setRenderer(AsciiDependencyReportRenderer())
    }

}
Run Code Online (Sandbox Code Playgroud)

然后申请:

./gradlew allDependencies | grep '\-\-\-' | grep -Po '\w+.*$' | awk -F ' ' '{ print $1 }' | sort | grep -v '\{' | grep -v '\[' | uniq | grep '.\+:.\+:.\+'
Run Code Online (Sandbox Code Playgroud)

这将为您提供项目和子项目中的所有依赖项以及所有第 3 方依赖项。

如果您想以编程方式完成此操作,那么您将需要一个自定义的依赖项渲染器 - 您可以从扩展AsciiDependencyReportRenderer默认情况下打印依赖项的 ascii 图表开始。


upo*_*pog 5

双击并在 gradle 视图中的帮助下运行依赖项

在此输入图像描述