如何在Spring Boot项目中全局强制使用kafka-clients 3.9.1版本
我太懂这种依赖版本“顽固不化”的糟心感了——明明手动加了排除又引了新版本,结果旧版本还赖在依赖树里不走,换谁都会头大。先帮你揪出当前配置里的关键错误,再给你几个更靠谱的全局强制版本的方法:
首先,你之前的排除规则完全没生效!你把kafka-clients的groupId写成了org.springframework.kafka,但实际上它的官方groupId是org.apache.kafka,这就相当于你在排除一个根本不存在的依赖,旧版本的3.8.1当然会继续被spring-kafka带进来。
接下来给你按简洁度排序的三种解决方案:
1. 用Spring Boot内置属性直接覆盖(最推荐)
Spring Boot的父pom早就为常用依赖预留了版本控制属性,你根本不需要手动排除或引入,只需要在pom.xml的<properties>里加一行配置就行:
<properties> <kafka-clients.version>3.9.1</kafka-clients.version> </properties>
Spring Boot的依赖管理系统会自动把整个项目里所有地方引用的kafka-clients版本替换成3.9.1,包括spring-kafka底层依赖的那个版本,全程不用操心,还不会出错。
2. 在项目的Dependency Management中锁版本
如果第一种方法因为你自定义了依赖管理规则而不生效,可以在项目的<dependencyManagement>节点里显式声明kafka-clients的版本,这是Maven里优先级最高的版本控制方式,任何下层依赖声明的旧版本都会被覆盖:
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.9.1</version> </dependency> </dependencies> </dependencyManagement>
这样整个项目的所有模块,不管是直接还是间接依赖kafka-clients,都会统一使用3.9.1版本。
3. 修正排除规则后手动引入(不推荐但可用)
如果你坚持想用排除+手动引入的方式,先把排除规则里的groupId改对,再手动引入新版本:
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>${spring-kafka.version}</version> <exclusions> <exclusion> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>${kafka-clients.version}</version> </dependency>
不过这种方法比较繁琐,还容易因为拼写错误出问题,所以更推荐前两种全局控制的方式。
最后别忘了用mvn dependency:tree命令检查一下依赖树,确认3.8.1的版本已经完全被3.9.1替代了。
内容来源于stack exchange

