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

如何完全离线构建Gradle项目?Linux+JDK11+Gradle5.0缓存失效问题求解

问题根因

你遇到的问题本质是构建脚本(classpath)依赖未被完整缓存,或是跨机器复制时缓存元数据失效,具体触发原因有3个:

  1. 在线构建时部分构建插件的依赖是按需加载的,你虽然在原机器完成了构建,但复制缓存前没有停止Gradle守护进程,部分缓存文件未完全落盘导致复制内容不全
  2. 你使用的Gradle 5.0版本缓存元数据会绑定当前机器的路径、用户信息,跨机器复制时元数据校验失败,导致Gradle不识别已存在的jar包
  3. 你复制的~/.gradle目录仅包含了项目运行时依赖,没有包含buildscript块声明的构建插件及其传递依赖;而可正常跨机器构建的FlatLaf项目没有引入第三方构建插件,所有构建逻辑用Gradle内置能力实现,所以没有触发该问题。

解决方案

方案1:兼容现有Gradle 5.0版本(无需改版本)

  • 在线环境预构建时先停止所有Gradle守护进程,执行buildEnvironment任务强制下载所有构建脚本依赖,确保所有缓存落盘
gradle --stop
./gradlew buildEnvironment
./gradlew clean build
  • 不要直接依赖~/.gradle的全局缓存,改用本地maven目录存所有依赖,规避跨机器元数据校验问题。在项目根目录的build.gradle开头添加如下配置:
buildscript {
    repositories {
        // 优先读取项目本地的maven依赖目录
        maven { url "${rootProject.projectDir}/maven-local" }
    }
}
allprojects {
    repositories {
        maven { url "${rootProject.projectDir}/maven-local" }
    }
}
  • 在线环境执行命令将所有依赖导出到项目本地maven目录:
./gradlew publishToMavenLocal -Dmaven.repo.local=./maven-local
  • 把整个项目连同maven-local目录一起拷贝到离线机器,直接执行构建即可:
./gradlew --offline clean build

方案2:升级Gradle到7.x版本(更稳定,兼容JDK11)

Gradle 6.0之后优化了离线缓存的跨机器兼容性,缓存元数据不再绑定机器信息,操作更简单:

  • 在线环境先将项目Gradle wrapper升级到7.6版本(兼容JDK11的最新稳定版)
./gradlew wrapper --gradle-version 7.6
gradle --stop
# 执行完整构建后停止守护进程再复制缓存
./gradlew clean build
gradle --stop
  • 跨机器完整复制~/.gradle目录,确保两台机器Gradle版本完全一致,离线构建时添加参数规避缓存校验即可:
./gradlew --offline --no-build-cache clean build

内容的提问来源于stack exchange,提问作者Ekaterina Ivanova iceja.net

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:48:04