1.pom中引用了hadoop2.7.3与ElasticSearch6.0.0造成连接不上ES的问题
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
14:46:25.703 [main] DEBUG io.netty.util.internal.logging.InternalLoggerFactory - Using SLF4J as the default logging framework
Exception in thread "main" java.lang.NoSuchMethodError: io.netty.buffer.CompositeByteBuf.addComponents(ZLjava/lang/Iterable;)Lio/netty/buffer/CompositeByteBuf;
at org.elasticsearch.transport.netty4.Netty4Utils.toByteBuf(Netty4Utils.java:122)
at org.elasticsearch.transport.netty4.Netty4Transport.sendMessage(Netty4Transport.java:318)
at org.elasticsearch.transport.netty4.Netty4Transport.sendMessage(Netty4Transport.java:88)
at org.elasticsearch.transport.TcpTransport.internalSendMessage(TcpTransport.java:1110)
这里可以看出是netty无法找到其中的一个方法。
2.在idea编译器中找到terminal命令行,切换到当前项目pom所在的目录,运行:
mvn dependency:tree
找到了2.7.3的hadoop使用的是3.X的netty,而6.0版本的ES使用了4.13版本的netty。
解决办法:
1.在pom中直接引用netty4.13
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.13.Final</version>
</dependency>
2.这个可能的解决办法是将两部分冲突的地方划分到不同的项目中
注意:mvn dependency:tree -Dverbose -Dincludes=asm:asm 类似的命令可以找到重复的jar包引用
补充,同时发现使用了spring boot,会导致networkplugin报错
这是因为spring boot引用了低版本的ES,在该项目中pom中显式的引用6.0的ES即可