我有一个main
构建和执行良好的项目 ()。
我envelope
有另一个main
项目(jar-with-dependencies
maven assembly plugin
当我运行 fat jar 时,我收到了这个错误:
NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.directExecutor
com.google.guava
谷歌表示这是由(在编译时和运行时使用的不同版本?)的版本之间的冲突引起的。
我已经在我项目的 pom.xml 的最顶部放置了对 guava 28.1 的依赖项envelope
,并将 guava 的排除项放在所有其他依赖项下。但是我仍然在运行时收到此错误!
我怎么知道它为什么这样做?我如何防止它这样做?我该如何解决这个错误?
编辑:
mvn dependency:tree
仅显示对番石榴的一种依赖。
External libraries
只显示一个版本的番石榴。
Ctrl+N
org.apache.curator
显示了 MoreExecutors 类的两个实例 - 一个来自最新的 guava 版本,一个形成对包含shaded.com.google.common.util.concurrent.MoreExecutors
该类的工件的深度瞬态依赖。
我尝试在我的 pom.xml 中排除此依赖项,但随后我收到一条错误消息,指出 Curator 未能找到 shaded.<..>.MoreExecutors 类。那么这可能是罪魁祸首,还是其他原因?
设置
-Java 11.0.3
-Groovy 2.5.8
-Spock 1.3-groovy-2.5
-IntelliJ IDEA 2019.1
-Maven 3.5
-Maven compiler plugin
-Maven build helper plugin
-Maven assembly plugin 3.8.1