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

我有另一个项目(envelope),该项目依赖于main项目,该项目作为胖罐(使用jar-with-dependenciesmaven assembly plugin)构建,然后从ALM(测试管理软件)运行

当我运行胖罐子时,出现此错误:


NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.directExecutor


谷歌表示,这是由com.google.guava版本之间的冲突引起的(在编译时和运行时使用不同的版本?)。

我已经在我的envelope项目的pom.xml的最顶部放置了对guava 28.1的依赖,并将对guava的排除放在了所有其他依赖项下。但是我仍然在运行时收到此错误!

我怎么知道为什么要这么做?我如何防止它这样做?以及如何解决错误?

编辑:

mvn dependency:tree仅显示一种对番石榴的依赖性。

External libraries仅显示番石榴的一种版本。

Ctrl+N显示了MoreExecutors类的两个实例-一个来自最新的番石榴版本,另一个实例对包含org.apache.curator类的shaded.com.google.common.util.concurrent.MoreExecutors工件形成了深深的暂时依赖。

我尝试在pom.xml中排除此依赖项,但是随后出现一条错误消息,指出Curator无法找到阴影的。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

最佳答案

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

 <dependencyManagement>
    <dependencies>
        <!-- add your dependency here -->
    </dependencies>
</dependencyManagement>

07-27 20:24