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