Gradle离线构建可行,需先联网完整下载所有依赖(含插件、传递依赖)至本地缓存(~/.gradle/caches/),再通过./gradlew build --offline断网构建;动态版本和私有仓库需提前成功解析,否则离线失败。

Gradle 本身不提供“一键离线构建”功能,但可以通过提前下载并缓存所有依赖,在无网络环境下完成构建。核心在于:让 Gradle 在有网时把项目所需的所有依赖(包括插件、库、传递依赖)完整拉取并存入本地缓存;之后断网也能复用这些缓存。
提前触发完整依赖解析与下载
单纯执行 ./gradlew build 可能不会下载全部依赖(比如某些插件或测试时才需的依赖)。更稳妥的方式是主动触发全量解析:
- 运行
./gradlew --refresh-dependencies build(强制刷新并下载所有已声明依赖) - 或更彻底地执行:
./gradlew resolveDependencies --configuration compileClasspath runtimeClasspath testCompileClasspath testRuntimeClasspath(显式解析常见配置) - 确保
settings.gradle中的插件仓库(如pluginManagement { repositories { ... } })也已配置好,并在联网时成功加载过插件
确认依赖已完整缓存到本地
Gradle 默认将依赖存放在用户主目录下的 ~/.gradle/caches/(Linux/macOS)或 %USERPROFILE%\.gradle\caches\(Windows)。验证是否齐全:
- 检查
~/.gradle/caches/modules-2/files-2.1/是否存在大量 jar/pom 文件(对应各依赖) - 检查
~/.gradle/caches/plugins-xx/是否有你项目用到的插件(如 kotlin-dsl、spring-boot等) - 可临时断网后运行
./gradlew build --info,观察日志中是否出现Downloaded from ...—— 若没有且构建成功,说明已离线可用
离线构建时启用 --offline 模式
断网后,必须显式启用离线模式,否则 Gradle 会尝试连接远程仓库并失败:
立即学习“Java免费学习笔记(深入)”;
- 执行
./gradlew build --offline -
--offline会跳过所有网络请求,只读取本地缓存;若某依赖缺失,会直接报错(提示 “Could not resolve …”),说明前期缓存不全 - 建议在 CI 或打包脚本中固定加上该参数,避免环境波动影响
处理私有仓库和动态版本等特殊依赖
以下情况容易导致离线失败,需额外注意:
-
私有 Maven/Nexus 仓库:确保其 URL 已配置在
build.gradle的repositories块中,且联网时至少成功命中一次;若仓库不可达,Gradle 不会跳过它而尝试下一个 - 动态版本(如 1.2.+ 或 latest.release):Gradle 离线时不解析新版本,但首次下载时可能只缓存了某个快照。建议改用固定版本(如 1.2.3)提升确定性
-
Gradle Wrapper 版本:确保
gradle/wrapper/gradle-wrapper.jar已存在(通常自带),且对应版本的 Gradle 发行包已缓存于~/.gradle/wrapper/dists/
不复杂但容易忽略 —— 关键不是“怎么离线”,而是“怎么确保所有东西都提前下全”。只要缓存到位,--offline 就是可靠的。


















