Maven 依赖冲突解决指南:mvn dependency:tree + 排除传递依赖的正确姿势
引言 周五下午六点,一次再平常不过的发版。服务在测试环境跑得好好的,上线五分钟后开始疯狂报错: java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.toImmutableList()... 测试全绿、代码没动过这块逻辑、报错的方法在 IDE 里点进去明明存在——这种"物理上不可能的报错"几乎只有一个解释:运行时加载的 jar 版本和编译时看到的不一样。用 mvn dependency:tree | grep guava 一查,真相大白:新引入的一个报表 SDK 传递依赖了 guava 18.0,而我们代码编译时用的是 25.1——toImmutableList() 是 21.0 才加的方法,运行时类路径上排在前面的 18.0 里根本没有它。 依赖冲突是 Java 项目生命周期里最"常见而不常见"的问题:日常感觉不到它,一旦出现就是 NoSuchMethodError、ClassNotFoundException、AbstractMethodError 这类"玄学报错",而且本地能跑线上炸(依赖树对 ....