今天在启动微服务项目的时候出现了一个错误,大概就是controller调用某个implservice的Bean找不到。
elasticsearch下的xcontent包下找不到ToXcontentObject这个类。
先查看POM文件,确认导入无误。
检查一遍yml配置文件,没什么大问题,检查一下JDK版本,也是没问题。再看了下maven projects,没有冲突,而且这个x-content这个依赖是存在的,于是又maven-reimport刷新了几下,还是不行。有点懵逼。
由于之前项目导入过不一样版本ElasticSearch依赖,怀疑是包冲突。最后把Maven库repository中的elasticsearch依赖删除了,mvn clean package重新编译了一下,仍然没什么叼用,陷入了沉思。。。
什么办法都没用只能使用最后的法宝,清除缓存然后重启,结果果然不出所料,还是TM的不行。。。
最后只能去看一下Jar包源码中报错的org.elasticsearch.comman.xcontent.ToXcontentObject类是个什么东西,然后搜索发现居然没有这个东西,如此诡异的BUG,Maven-projects中都有这个依赖,项目的external libraies里面没有,之前maven-reimport过呀。
可能是整个项目的问题,然后用idea单独打开了这个服务,果然external libraies中有了jar包,找到了该死的ToXcontentObject接口。服务也可以正常启动了。
至于为什么之前的项目存在maven中有依赖,external libraies中没jar包的情况,还需要再仔细思考下,谷歌了一下说需要maven-reimport一下那显然对我无效,先把问题解决了再说。。。以后微服务再莫名其妙找不到jar包就把他挑出来单练。
java
.
lan
g.
NoClassDefFoundError
:
org
/
elasticsearch
/common/xcontent/DeprecationHandler
报找不到类,这个类应该
7.3.2里面的,我pom依赖也没
问题
编译阶段没
问题
,到运行时候,有
问题
,所以到打好的lib包中查看:
发现 这个es还是老的包。
从pom中查看
有
问题
。
将es依赖重新放到项目的根级父类后:
并在子模块中,将pom依赖中的版本号干掉,让它自动继承
再次打包,查看lib
全部ok,重启服务,正常,问
jdk升级之后出现
异常
:
java
.
lan
g.
NoClassDefFoundError
:
java
x/xml/ws/Service
1、解决方案jdk降级至1.8之前
2、由于JDK9以后,去除了
java
x.xml包需要引入对应的jar包
<dependency>
<groupId>
java
x.activation</groupId>
<artifactId>
java
x.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>
java
x.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
.....
在学习
elasticsearch
,在使用
elasticsearch
Java
客户端时,出现了写
问题
,主要就是报各种的 `
NoClassDefFoundError
`
如:`
java
.
lan
g.
NoClassDefFoundError
:
org
/
elasticsearch
/xcontent/ToXContentObject`,出现这种
NoClassDefFoundError
的
问题
基本上就是
maven
依赖错误或者版本不对,于是顺着这个思路排查,摸到了
问题
所在。
<dependency>
<groupId>
org
.
elasticsearch
.
client
</groupId>
<artifactId>
elasticsearch
-
rest
-
high
-
level
-
client
</artifactId>
心都凉了,主要是引入依赖的时候,
Rest
High
Level
Client
版本和子包版本不一致,我这边的话是选中的三个包版本不一致,当然图里是我整里半天整一致的,原先好像是7.x,可能是因为我的电脑里6和7都有吧。。。
解决方案就是强制依赖包的版本确保一致,我这边是用了management,也可以用exclousions先排除依赖包,在引入正确的版本,当然这边因为版本不一致报了各种各样的错误,不一定就是这个
异常
,勿喷
<dependencyManagement>
failed to load
elasticsearch
nodes :
org
.
elasticsearch
.
client
.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{4J2eCGFXSZmM3xH72WIF5A}{192.168.252.200}{...
问题
定位及分析
通常出现
java
.
lan
g.NoSuchMethodError
异常
说明项目中出现了jar包冲突,项目运行时调用了版本A中的某个类的方法, 但实际上classLoader加载的是版本B的类文件,而版本B中并没有实际调用的方法签名,导致
异常
出现。
可以看到
elasticsearch
-
rest
-
high
-
level
-
client
:7.4.2依赖于
elasticsearch
...
Exception in thread "main"
java
.
lan
g.
NoClassDefFoundError
:
org
/
elasticsearch
/index/reindex/ReindexPlugin
at
org
.
elasticsearch
.transport.
client
.PreBuiltTransport
Client
.<clinit>(PreBuiltTransport
Client
.
java
:78)
at ElasticsSearchUtil.ci...