我有一个构建并执行良好的项目(main
)。
我有另一个项目(envelope
),该项目依赖于main
项目,该项目作为胖罐(使用jar-with-dependencies
的maven 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>