一、问题背景
Spring Boot 项目通常依赖大量 Starter,例如:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
这些 Starter 又会传递大量依赖。只要其中某个 JAR 下载异常,就可能导致:
编译报错;
IDEA 爆红;
启动时
ClassNotFoundException;Maven 构建失败;
很多人第一反应是版本冲突、依赖排除、Scope 配错,但实际上,本地仓库里的 JAR 本身可能就是一个错误网页。
二、依赖无效的常见现象
如果本地仓库中的 JAR 是“假 JAR”,你可能会看到这些报错:
java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
java.lang.NoClassDefFoundError: org/springframework/boot/...
在 IDEA 中可能表现为:
Cannot resolve symbol 'springframework'Maven 面板依赖爆红
Reload 后仍然无效
mvn clean install失败
这些现象很容易让人误以为是 Spring Boot 版本问题,实际上可能是JAR 文件内容不对。
三、原因一:无网络/网络受限,Maven 下载到错误网页
3.1 严格来说,完全断网不会下载到 HTML
如果你完全断网,Maven 通常会直接报:
UnknownHostException ConnectException Connection timed out Read timed out
这种情况下,构建会失败,但一般不会生成一个“假 JAR”。
真正的是:网络受限,但请求被代理、网关、登录页、错误页拦截,并且返回了 HTTP 200 的 HTML 页面。
Maven 期望拿到二进制 JAR,但它并不总是严格检查Content-Type。如果仓库返回的是 HTML,且 HTTP 状态码是 200,Maven 可能把这个 HTML 文件直接保存为:
spring-boot-starter-web-3.2.5.jar
3.2 典型特征
文件体积很小,可能只有几百字节到几 KB;
用文本编辑器打开能看到
<!DOCTYPE html>、<html>、<title>;unzip无法解压;Maven 可能认为依赖已经下载成功,因为文件确实存在;
编译或运行时才暴露问题。
3.4 解决方案
删除无效 JAR 和失败缓存,找到电脑maven安装环境中的文件目录repository,在这个文件夹中查找刚下载的jar包将其删除
四、原因二:Maven 镜像地址过期,导致 JAR 无效
4.1 镜像过期为什么会导致 JAR 无效?
Maven 的settings.xml中经常配置镜像:
<mirrors> <mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> </mirrors>
如果这个地址已经过期、迁移、协议变更,或者路径失效,就可能出现:
返回 301/302 重定向;
返回 404 页面;
返回 403 无权限页面;
返回登录页 HTML;
返回 Nginx 默认页;
Maven 把 HTML 保存成 JAR。
结果就是:依赖看起来下载了,但实际是无效文件。
4.2 解决方案
更新 Maven 安装目录下
settings.xml换成有效镜像地址。
删除本地仓库中对应依赖目录。
五、完整解决方案与清理步骤
第一步:定位报错依赖
从 Maven 报错或 IDEA 爆红处找到具体依赖路径