You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle构件存储疑问:.m2与gradle\caches的适用场景及本地依赖问题

嘿,这个问题问到点子上了!搞本地构建依赖问题时,摸透Gradle的缓存逻辑绝对是关键。我给你理清楚这两个目录的使用场景:

Gradle 把构件存在 .m2 目录的场景

.m2 本质是Maven的本地仓库目录,Gradle只有在和Maven兼容相关的场景下才会往这里存东西:

  • 发布自家项目到本地Maven仓库时:如果你用了 maven-publish 插件,执行 publishToMavenLocal 任务,Gradle就会把你项目打包好的jar、pom等构件存到 .m2/repository 里,方便其他用Maven或Gradle的项目直接引用。另外老版本的 maven 插件里的 install 任务,也是干这个事儿的。
  • 配置了 mavenLocal() 作为依赖源,且主动同步依赖到本地Maven仓库时:默认情况下Gradle不会把下载的依赖同步到 .m2,但如果你手动配置了相关的同步策略(比如通过 ResolutionStrategy),拉取的远程依赖就会被同步到这里。
  • 其他工具(比如Maven)下载的依赖,或者你手动放到 .m2 的构件:虽然不是Gradle主动存的,但当Gradle在依赖解析时,如果 mavenLocal() 在仓库列表里,它会优先去 .m2 找这些现成的构件。
Gradle 把构件存在 gradle/caches 目录的场景

这个是Gradle自己的核心缓存目录,绝大多数构建相关的缓存都存在这里:

  • 拉取远程仓库的所有依赖:不管是从Maven Central、私有仓库还是其他远程源拉的jar、aar、pom等依赖文件,Gradle都会默认缓存到 gradle/caches/modules-2/files-2.1 目录下,这样后续构建就不用重复下载,大大提速。
  • 构建过程中生成的各类缓存文件:比如编译后的类文件缓存、增量构建的状态缓存、Gradle插件的缓存(存在 gradle/caches/plugins)、构建脚本的编译缓存等等,这些都是Gradle为了优化构建速度自动生成的。
  • 多模块项目的内部依赖缓存:在多模块项目里,模块之间的依赖产物(比如某个子模块打包好的jar)会被Gradle缓存到这里,其他模块引用时直接用缓存,不用每次都重新构建依赖模块。
  • Gradle Wrapper下载的Gradle发行版:如果你用Gradle Wrapper管理Gradle版本,下载的对应版本Gradle会存在 gradle/caches/wrapper/dists 里,下次用同版本就不用再下载了。

排查依赖问题的小Tips

如果遇到依赖找不到、版本冲突或者缓存损坏的问题,可以试试:

  • 执行 ./gradlew clean build --refresh-dependencies,强制Gradle刷新依赖,重新拉取所有远程依赖。
  • 直接删除 gradle/caches 目录下对应的缓存文件夹,或者整个缓存目录,让Gradle从头开始构建缓存。
  • 检查你的 build.gradle 仓库配置,确认依赖的来源优先级,是不是不小心把 mavenLocal() 放在了远程仓库前面,导致用到了本地旧的依赖。

内容的提问来源于stack exchange,提问作者letthefireflieslive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:35:36