目前最新版的ElasticSearch为7.3.1,SpringBoot2.x版本还没有即时的更新,其父级依赖还是<elasticsearch.version>5.6.10</elasticsearch.version>
,因此需要再子项目中覆盖父级别的依赖,指定子项目的正确版本。子项目中Elasticsearch7.3.1的正确配置方式如下:
SpringBoot父级依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
子项目中覆盖父依赖中的elasticsearch的依赖:
1、再dependencyManagement中明确指定子项目中的依赖版本,注意的是dependencyManagement中指定的依赖版本仅仅是作为属性存在的,并不会真正导入依赖,因此需要再次导入对应的依赖;
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--注意:如果使用了parent那么需要在此定义es版本号,因为spring-boot-start-parent中已经定义了es相关依赖的版本号,high-level-client中的部分依赖会被覆盖成低版本的,导出出现莫名其妙的错误-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
2、再pom.xml的dependencies节点中真正导入dependencyManagement指定的依赖:
<!-- es相关的依赖配置,必须在dependencyManagement中声明版本号进行父级依赖的覆盖,否则将被父级依赖覆盖 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version><!--$NO-MVN-MAN-VER$-->
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.2.0</version><!--$NO-MVN-MAN-VER$-->
</dependency>