核心原因是Maven离线模式下仍尝试联网校验_remote.repositories等文件,必须删除所有_remote.repositories、*.lastUpdated文件,显式配置本地仓库路径与file://镜像,并用mvn -o -nsu命令执行。

离线模式下 Maven 编译失败,核心原因不是“不能用”,而是它仍试图联网校验或加载缺失组件——比如插件、远程元数据文件或未缓存的传递依赖。关键在于让 Maven 真正只读本地仓库,且本地仓库本身是干净、完整、无残留网络标记的。
删掉所有 _remote.repositories 文件
这是最容易被忽略却最常导致失败的一步。Maven 会在每个 jar/pom 目录下生成 _remote.repositories 文件,记录该包来源的远程仓库 ID。即使你开了离线模式,只要这个文件存在,Maven 就会尝试去对应仓库验证(哪怕只是检查是否存在),而离线时必然失败。
- Windows 下执行:
for /r %i in (_remote.repositories) do del %i - Linux/macOS 下执行:
find ~/.m2/repository -name "_remote.repositories" -delete - 建议一并清理:
*.sha1、*.lastUpdated文件(它们也会触发校验逻辑)
确保插件和构建工具也已缓存
很多人只缓存了 <dependencies>,却忘了 Maven 自身运行所需的插件(如 maven-compiler-plugin、maven-jar-plugin、spring-boot-maven-plugin 等)默认来自中央仓库,且不会被 mvn dependency:go-offline 自动拉取。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在联网环境执行:
mvn help:effective-pom查看实际生效的插件列表 - 对常用插件显式触发下载:
mvn compiler:help resources:help jar:help install:help - 如果用了 Spring Boot,额外执行:
mvn spring-boot:help - 最后再跑一次完整构建:
mvn clean package,确保所有插件 jar 都落进本地仓库
正确配置 settings.xml 的离线与本地仓库
仅加 <offline>true</offline> 不够,必须配合明确的本地路径和镜像重定向,否则 Maven 可能仍按默认逻辑找错位置。
- 设置
<localRepository>/path/to/your/repo</localRepository>,指向你拷贝过来的完整 repository 目录 - 添加本地镜像,把所有远程请求转为本地文件读取:
<mirror>
<id>offline-mirror</id>
<mirrorOf>*</mirrorOf>
<url>file:///path/to/your/repo</url>
</mirror> - 确认
<offline>true</offline>放在<settings>根节点下,不是嵌套在其他标签里
命令行要带对参数,别只靠 IDEA 开关
IDEA 的 “Work offline” 按钮只影响其内部行为,不改变命令行 mvn 的实际执行逻辑。真正可靠的是显式传参。
- 使用:
mvn -o -nsu clean package
-o = offline,-nsu = no-snapshot-updates(避免检查 SNAPSHOT 更新) - 跳过测试更稳妥:
-Dmaven.test.skip=true - 验证是否真离线:加
-X参数看日志,确认所有 download URL 都是file://开头,且无 HTTP 请求

















