gradle dependencies输出与~/.gradle/cache依赖差异及来源
两者的统计范畴完全不同
gradle dependencies任务的输出,仅统计当前项目构建脚本中声明的、与业务代码源集(主代码、测试代码)直接绑定的依赖树,也就是你示例输出里的joda-time、junit、hamcrest-core三个组件——这些是为你编写的Java业务代码编译、测试运行提供支持的依赖。~/.gradle/cache是Gradle的全局共享工作目录,存储的内容远不止项目声明的业务依赖,因此文件数量、总体规模远大于单项目的依赖树输出是完全正常的,不属于依赖解析异常。
缓存中额外jar包的具体来源
- Gradle 工具自身的运行时依赖
列表内所有带gradle-*前缀、kotlin-*前缀、groovy-all、native-platform-*、slf4j-*标识的jar包,全部是Gradle程序本身启动、执行任务所需的运行时组件,和你的项目业务代码没有关联。这些组件覆盖Gradle核心任务引擎、命令行解析模块、Kotlin DSL语法支持、跨平台本地交互库、日志桥接组件等,首次运行对应版本的Gradle时,这些包就会自动拉取到全局缓存中。 - Gradle 内置插件的配套依赖
哪怕你没有在build.gradle中手动引入任何第三方插件,Gradle也会默认预装Java构建、测试执行、依赖管理等核心能力对应的内置插件,这些插件运行时依赖的配套jar也会存入缓存。比如测试执行用到的JUnit平台适配组件、依赖解析用到的aether/maven兼容组件、测试报告生成用到的asm/ant系列组件、远程构建缓存对接云存储的SDK组件等,这些组件不需要你在项目里手动声明,执行构建任务时会自动加载到缓存中。 - 本次命令执行触发的额外加载
你运行的命令携带了--refresh-dependencies参数,会强制Gradle对所有已解析配置的依赖做元数据重新拉取;同时命令中触发了test任务执行,过程中会提前加载测试框架适配、任务输出采集的配套依赖,这些组件也会在本次运行中被写入缓存。
补充提示:Gradle缓存不是单项目专属的依赖目录,它同时承担跨项目复用依赖、存放工具运行时组件、缓存构建元数据的作用,直接拿单项目的dependencies输出和全局缓存的文件列表做数量对比,本身就不在同一个统计维度上。
内容的提问来源于stack exchange,提问作者Spacebob
相关产品推荐
相关产品推荐

