最常用、最精准的解决方式是在对应依赖中用<exclusions>排除冲突的传递依赖,即阻止特定依赖带入指定子依赖;需先通过mvn dependency:tree -Dincludes=groupId:artifactId定位冲突来源,在引入旧版本的直接依赖内配置<exclusion>,并配合<dependencyManagement>统一锁定版本。

直接在对应依赖中用 <exclusions> 排除冲突的传递依赖,是最常用、最精准的解决方式。关键不是“删掉什么”,而是“阻止谁带入谁”。
先定位冲突来源
执行命令查看依赖树,重点找带 omitted for conflict 的行:
mvn dependency:tree -Dincludes=groupId:artifactId
例如查 Jackson 冲突:
立即学习“Java免费学习笔记(深入)”;
mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
输出会显示多个版本(如 2.11.0、2.13.3)分别从哪条路径引入,比如:
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.7.0[INFO] | \- com.fasterxml.jackson.core:jackson-databind:jar:2.13.3[INFO] \- com.example:legacy-sdk:jar:1.2[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.11.0 (omitted for conflict)
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
说明 2.11.0 被跳过,但它的存在本身可能已造成编译或运行时异常(如方法签名不兼容)。
在父依赖中写 <exclusions>
找到引入了旧版的那个直接依赖(这里是 legacy-sdk),在其 <dependency> 块内添加排除:
<dependency>
<groupId>com.example</groupId>
<artifactId>legacy-sdk</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
注意点:
-
必须写全
<groupId>和<artifactId>,大小写、连字符都不能错 - 一个
<dependency>可含多个<exclusion>,适合一次切断多个干扰项 - 排除后,该依赖自身功能不受影响,只是不再“顺手带上”被排除的 jar
配合 <dependencyManagement> 锁定主版本
仅靠排除容易遗漏,尤其在多模块项目中。建议在根 pom 的 <dependencyManagement> 中统一指定你认可的版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
</dependencies>
</dependencyManagement>
这样所有子模块即使没声明 version,也会默认使用 2.13.3;若某处仍引入旧版,Maven 仲裁机制会自动覆盖,且 mvn dependency:tree 中会明确标出 “version managed from …”。
验证是否生效
改完 pom 后务必重新执行:
mvn clean compilemvn dependency:tree | grep jackson-databind
理想结果是只看到一行目标版本(如 jackson-databind:2.13.3),且没有 omitted for conflict 提示。再跑单元测试或启动应用,确认 NoSuchMethodError 或 ClassNotFoundException 类异常消失。

















