注释旧依赖仍残留旧Jar四大原因+分步解决(IDEA+Maven)
一、核心3个根本原因
1.【最常见:传递依赖带入旧包】(注释直接依赖没用)
旧包不是你直接写的dependency引入,是别的第三方依赖A/B/C内部间接依赖了旧版本Jar。
例:注释
xxx-old:1.0,但common-util:2.0内部自带依赖xxx-old:1.0,Maven自动传递引入,External Libraries依旧存在旧包。
2.【IDEA缓存没刷新,Reimport只刷新pom不删缓存】
手动点Reload All Maven Projects只是重新解析pom,不会清空IDEA本地索引缓存、编译缓存,IDE仍读取旧类路径。
3.【Maven本地仓库缓存残留】
.m2/repository本地仓库已经下载过旧包,Maven默认优先读本地缓存,不会自动删除旧目录。
4.【父pom/dependencyManagement锁定版本】
父工程统一管控版本,子模块注释无效,仍继承旧版约束。
二、快速排查(先查来源)
- 终端执行命令查依赖链路,定位谁带了旧包:
shell
# windows
mvn dependency:tree | findstr 包名
# mac/linux
mvn dependency:tree | grep 包名
输出能看到:A依赖 → B依赖 → 旧版本jar
IDEA装
Maven Helper插件,打开pom→Dependency Analyzer一键看冲突依赖、快速排除
三、分步修复顺序(从上到下执行)
① 传递依赖代码排除(找到引入旧包的依赖,加exclusions)
xml
<dependency>
<groupId>第三方包groupId</groupId>
<artifactId>第三方包artifactId</artifactId>
<version>xxx</version>
<!-- 排除里面自带的旧包 -->
<exclusions>
<exclusion>
<groupId>旧包groupId</groupId>
<artifactId>旧包artifactId</artifactId>
</exclusion>
</exclusions>
</dependency>
再在pom正常新增新版依赖。
② 命令强制更新+清理本地缓存
shell
# -U强制拉新包、清理target
mvn clean compile -U
无效就手动进.m2/repository删除旧包整个文件夹,让maven重新下载新版。
③ IDEA清缓存
File → Invalidate Caches / Restart → Invalidate and Restart,重启后自动重建依赖索引。
④ 关闭Maven离线模式
右侧Maven面板取消勾选Work offline,离线会永远读本地旧缓存。
四、最简总结
注释只能干掉自己手写的依赖,干不掉别的包偷偷带进来的传递依赖,必须exclusion+清缓存两步。