NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.directExecutor在Elastic Search jar上进行conflits
在创建Elasticsearch客户端时,我得到exceptionjava.lang.NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava / util / concurrent / Executor; 在一些查找之后,像Guava-18这样的接口在运行时被旧版本覆盖,而Guava-18仅在编译任务期间工作。
我的Maven配置如下:
maven-compiler-plugin 3.0 1.7 1.7 org.apache.maven.plugins maven-shade-plugin 2.4.1 package shade
我如何在执行时强制使用Guava-18版本?
您应该尝试找到“老”版本的番石榴从哪里取出并一次性排除它。
找到依赖:
mvn dependency:tree | grep guava
排除它:
org.whatever the_lib_that_includes_guava 0.97 com.google guava
有关依赖项排除的详细信息,请参阅https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html 。
我添加了elasticsearch的正确依赖关系来解决问题
com.google.guava guava 18.0
在创建Elasticsearch客户端实例时,我也看到了OP提到的错误消息。 在我的情况下,它发生在应用程序启动时的Spring Boot应用程序中。 Spring Boot试图通过spring-boot-starter-data-elasticsearch
引入的依赖项自动配置Elasticsearch客户端。 引入的底层番石榴版本是:
com.google.guava guava 18.0
这一切都正常,直到我介绍了以下google-api-client
依赖…
com.google.api-client google-api-client 1.23.0
……这取决于以下番石榴依赖性:
com.google.guava guava-jdk5 17.0
这导致类路径冲突,修复是从google-api-client
排除旧的guava版本,如下所示:
com.google.api-client google-api-client 1.23.0 com.google.guava guava-jdk5
添加dependencyManagement
块可以解决此问题:
com.google.guava guava 20.0
参考:
http://techidiocy.com/maven-dependency-version-conflict-problem-and-resolution/
我有类似的问题。 我创建了一个.jar文件(Java源代码),然后我想将该文件加载到Spark Shell中 。 事实certificate,Spark Shell从类似于spark- [version] -bin-hadoop [version] / jars /“的东西加载jar子。
该目录有一个较旧版本的番石榴,导致错误。 我的pom.xml中有正确的版本。 我甚至添加了排除项和所有建议的回复。 总之,它确实是番石榴的错误版本。 我复制了与我的pom.xml文件匹配的版本。 希望这可以帮助。 问候。
已解决:我将Guava依赖关系更新为最新版本并解决了问题
com.google.guava guava latest