如何在Maven中指定spring-data-elasticsearch依赖版本而非自动更新?
问题根源
你使用的spring-boot-starter-data-elasticsearch:2.5.7会继承Spring Boot父项目的**依赖管理(Dependency Management)**机制,其中已预定义spring-data-elasticsearch的版本。Maven解析依赖时会优先使用依赖管理中指定的版本,这就是你无法直接通过修改starter依赖切换版本的原因。
解决方案
方法1:通过Spring Boot属性覆盖(推荐)
Spring Boot为常用依赖提供了版本属性,你可以在pom.xml的<properties>节点中直接指定spring-data-elasticsearch版本,这会自动覆盖依赖管理中的配置,同时关联的rest-high-level-client也会跟随该版本(因为spring-data-elasticsearch的依赖版本与其绑定)。
<properties> <!-- 指定spring-data-elasticsearch版本 --> <spring-data-elasticsearch.version>4.2.7</spring-data-elasticsearch.version> </properties> <dependencies> <!-- 保留原starter依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.5.7</version> </dependency> </dependencies>
方法2:显式声明spring-data-elasticsearch依赖
如果属性覆盖不生效,可直接在<dependencies>中显式声明spring-data-elasticsearch并指定版本,Maven会优先使用显式声明的版本。注意需确保版本与Spring Boot 2.5.7兼容(4.2.x系列适配Spring Boot 2.5.x,4.4.x对应Spring Boot 2.6.x)。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.5.7</version> </dependency> <!-- 显式指定spring-data-elasticsearch版本 --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> <version>4.2.7</version> </dependency> </dependencies>
关于rest-high-level-client版本
rest-high-level-client是spring-data-elasticsearch的传递依赖,指定spring-data-elasticsearch版本后,会自动引入对应兼容的客户端版本。若存在其他依赖引入更高版本的rest-high-level-client,可通过以下方式强制指定:
<properties> <!-- 直接指定rest-high-level-client版本(spring-data-elasticsearch 4.2.7对应7.17.0) --> <elasticsearch.version>7.17.0</elasticsearch.version> </properties>
验证版本
可通过Maven命令查看最终依赖树,确认版本是否生效:
mvn dependency:tree -Dincludes=org.springframework.data:spring-data-elasticsearch,org.elasticsearch.client:rest-high-level-client
内容的提问来源于stack exchange,提问作者Sandeep Nair

