springboot集成elasticsearch客户端问题记录

1背景说明

服务端ES版本为5.5.2,springboot版本为1.5.6。

工程中添加如下依赖

e6633d139767dc3e1ac4c306e7c5895e322.jpg

2问题记录

2.1 NetworkPlugin类找不到

报错java.lang.ClassNotFoundException: org.elasticsearch.plugins.NetworkPlugin

和java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin

c03ad6391b55de9170e1be9bb9b3df415ff.jpg

问题分析:

在biz模块引入了5.5.2版本的es client jar,能找到对应的类

79c2f018c6824e3ffbc0862b44cdb02b4ff.jpg

查看api模块的war中的es client jar版本确实不是5.5.2,而是springboot默认的2.4.5,此版本确实是没有NetworkPlugin这个类的。

f2ce9aa9f6eb1b2e6c0ced5bddf285073a2.jpg

这里涉及到maven的Dependency management 的两个作用,其中第二个方面就解释了为什么出现jar包版本的问题

1)It is a central place for defining versions of dependencies.

So when an artifact version is defined in the <dependencyManagement> section you can declare the dependency in your pom without defining the version, and the version defined in <dependencyManagement> will be used automatically.

Example 1

Let's say your parent pom defined the following

<dependencyManagement>

  <dependencies>

    <dependency>

      <groupId>com.mememe</groupId>

      <artifactId>mylib</artifactId>

      <version>1.1.12</version>

    </dependency>

  </dependencies>

</dependencyManagement>

Then if you define the following in your pom

<dependencies>

  <dependency>

    <groupId>com.mememe</groupId>

    <artifactId>mylib</artifactId>

  </dependency>

</dependencies>

Your project will automatically use version 1.1.12 as defined in the <dependencyManagement> section of your parent pom.

2)Overriding the versions of transitive dependencies.

If you have an artifact version defined in your <dependencyManagement> and one of your dependencies has a transitive dependency on the same artifact, the version of the artifact defined in your <dependencyManagement> section is used automatically.

Example 2

Let's say this artifact

<dependency>

  <groupId>com.youyou</groupId>

  <artifactId>yourlib</artifactId>

  <version>3.0.0</version>

</dependency>

Has this transitive dependency

<dependency>

  <groupId>com.morestuff</groupId>

  <artifactId>morelib</artifactId>

  <version>2.0.0</version>

</dependency>

Now let's say our parent pom defines this <dependencyManagement> section

<dependencyManagement>

  <dependencies>

    <dependency>

      <groupId>com.morestuff</groupId>

      <artifactId>morelib</artifactId>

      <version>2.5.2</version>

    </dependency>

  </dependencies>

</dependencyManagement>

Then if you define this dependency in your pom

<dependency>

  <groupId>com.youyou</groupId>

  <artifactId>yourlib</artifactId>

  <version>3.0.0</version>

</dependency>

Maven will override yourlib's dependency on morelib version 2.0.0 with morelib version 2.5.2.

参考:

https://stackoverflow.com/questions/49134849/maven-dependencytree-log-version1-compile-version-managed-from-version2

 

解决办法就是在api模块的pom文件中再一次添加依赖

5861d40f68241ed06cdfd05ec99e42a2aa5.jpg

2.2 netty版本冲突

报错

Exception in thread "elasticsearch[_client_][management][T#1]" java.lang.AbstractMethodError:

d44abe4f49aa69f9bc58c56f2701418b3fe.jpg

极光推送的客户端jar包也引入了netty

去掉即可

7f7e3ce52c45521350468c4c20f946043d5.jpg

转载于:https://my.oschina.net/zjg23/blog/1859614

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值