Java maven测试和验证的不同类路径?
我可以在maven测试阶段通过我的单元,但如果我运行verify,我将遇到NoSuchMethodError问题。我在父pom文件和子模块文件中有不同的番石榴版本。但奇怪的是,测试通过了测试,但在验证中遇到了这个问题。有人能告诉我为什么吗?谢谢Java maven测试和验证的不同类路径?,java,maven,guava,Java,Maven,Guava,我可以在maven测试阶段通过我的单元,但如果我运行verify,我将遇到NoSuchMethodError问题。我在父pom文件和子模块文件中有不同的番石榴版本。但奇怪的是,测试通过了测试,但在验证中遇到了这个问题。有人能告诉我为什么吗?谢谢 java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
at org.elasticsearch.threadpool.ThreadPool.<clinit>(ThreadPool.java:192)
at org.elasticsearch.node.Node.<init>(Node.java:170)
at org.elasticsearch.node.Node.<init>(Node.java:140)
at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:143)
at org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:150)
....
java.lang.NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
位于org.elasticsearch.threadpool.threadpool.(threadpool.java:192)
在org.elasticsearch.node.node.(node.java:170)
在org.elasticsearch.node.node.(node.java:140)
位于org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:143)
位于org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:150)
....
这是父pom文件中与番石榴相关的内容
<properties>
<guava.version>15.0</guava.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
...
15
番石榴
番石榴
${guava.version}
...
这是子模块中与番石榴相关的东西
<properties>
<guava.version>18.0</guava.version>
</properties>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
18
番石榴
番石榴
${guava.version}
您没有为我们提供任何帮助。那么一些代码,一些maven依赖性呢?Guava 18.0中引入了依赖树或其他什么?MoreExecutors.directExecutor()
。您很可能在类路径上有一个版本Guava 18+和另一个低于该版本的版本。散列和其他操作会使一个版本在不同的上下文中先于另一个版本,而test
和verify
是不同的上下文。@OlivierGrégoire让我惊讶的是,为什么maven verify会选择guava 15,而maven test会选择guava 18这就是为什么mvn依赖项:tree
会有所帮助。让我们想象以下场景:父母pom A,孩子pom B和C。A说“我吃番石榴15”,B说“我和父母一样吃”,C说“我吃B加番石榴18”,bam,你需要两个版本。正如我所说的,有一些散列和上下文为类路径添加了更多内容。他们可能会在某一点上把番石榴15放在番石榴18之前,而在另一种情况下会做相反的事情。为了避免您的问题,只需检查依赖关系树,然后使用..
@OlivierGrégoire依赖关系从您的孩子身上删除不需要的番石榴版本:树
显示我得到了正确的番石榴18,并且通过了测试阶段,但当我运行mvn verify
时,测试失败,非常奇怪,似乎验证阶段
需要番石榴15,而测试阶段
需要番石榴18