0

我有一个main构建和执行良好的项目 ()。

envelope有另一个main项目(jar-with-dependenciesmaven 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+Norg.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
4

1 回答 1

0

您可以尝试将您的依赖项放在 Mavendependency management中,以便管理传递依赖项中使用的工件版本。

 <dependencyManagement>
    <dependencies>
        <!-- add your dependency here -->
    </dependencies>
</dependencyManagement>
于 2019-09-27T20:01:04.343 回答