offline=true仅跳过远程仓库检查,不解决本地缺包、依赖冲突或插件未预装问题;必须先联网完整构建确保本地仓库齐全,且该配置仅在settings根节点生效。

settings.xml 里 offline 设为 true 不等于“本地构建就一定成功”
离线模式只是让 maven 跳过远程仓库检查,不拉取任何新依赖;但它不会帮你解决本地仓库缺包、依赖冲突或插件未预装的问题。很多同学开 offline=true 后执行 mvn clean compile 直接失败,根本原因是:本地 ~/.m2/repository 根本没存够项目所需的所有依赖和插件。
- 必须先在有网环境完整构建一次(
mvn clean compile -U),确保所有传递依赖都落盘 -
offline=true对mvn dependency:copy-dependencies这类目标无效——它仍会尝试解析远程坐标,直接报错 - 某些插件(如
maven-compiler-plugin)版本若未在本地仓库存在,离线时连编译器都加载失败
离线构建前必须手动校验本地仓库完整性
光靠 offline=true 没用,得确认 ~/.m2/repository 里真有全部需要的东西。最可靠的方式是比对 pom.xml 中声明的依赖和本地路径是否存在对应文件夹。
- 检查关键依赖是否存在:
ls ~/.m2/repository/junit/junit/4.13.2/—— 如果目录为空或只有_remote.repositories,说明没下下来 - 插件同样要查:
ls ~/.m2/repository/org/apache/maven/plugins/maven-surefire-plugin/3.0.0-M9/ - 用
mvn dependency:resolve -Dclassifier=tests在联网时跑一次,能提前暴露缺失的测试依赖
settings.xml 的 offline 配置位置和作用范围
offline 是全局开关,只在 <settings></settings> 根节点下生效,不能写在 <profiles></profiles> 或 <servers></servers> 里。设成 true 后,Maven 会跳过所有远程仓库访问,包括中央仓库、私库、甚至 pluginRepositories。
- 正确写法:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"> <offline>true</offline> </settings> - 错误写法:
<profile><offline>true</offline></profile>—— 完全不生效 - 命令行覆盖优先级更高:
mvn compile -o(-o即 offline)会覆盖 settings.xml 里的设置
离线时 mvn install 和 mvn deploy 的行为差异
mvn install 在离线模式下照常运行,把构建产物装进本地仓库;但 mvn deploy 会直接失败,因为它的设计目标就是上传到远程仓库,跟 offline=true 冲突。
立即学习“Java免费学习笔记(深入)”;
-
mvn install:只操作~/.m2/repository,离线完全 OK -
mvn deploy:报错org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact ...,哪怕你配了file://协议的本地 deploy 仓库也不行(除非改用maven-deploy-plugin的deploy-file目标) - CI 场景注意:jenkins 流水线里如果用了
mvn deploy,离线构建必然中断,得提前剥离或条件跳过
离线构建真正卡住的地方,往往不是配置写没写对,而是本地仓库里少了一个 xxx-1.2.3.pom.sha1 文件,或者某个依赖的 optional=true 传递依赖被忽略掉了——这些细节不报错,只在 classpath 缺失时才暴露。