Eclipse:无法解析org.hamcrest.core.CombinableMatcher $ CombinableBothMatcher类型.它是从所需的.class文件中间接引用的 [英] Eclipse: The type org.hamcrest.core.CombinableMatcher$CombinableBothMatcher cannot be resolved. It is indirectly referenced from required .class files
问题描述
我正在使用TestNG
和Mockito
对Spring MVC
控制器进行单元测试.我在Maven依赖项中包含了Hamcrest
库,如下所示.我在这里想念什么?当我使用以下两种方法时,将显示该错误:
I was working on a unit testing for a Spring MVC
controller using TestNG
and Mockito
. I've included Hamcrest
library in the Maven dependencies as shown below. What am I missing here? The error shows up when I use the following two methods:
org.hamcrest.Matchers.hasSize;
org.hamcrest.Matchers.is;
以下是我的依赖项:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.10.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
更新1:
通过将hamcrest-library
更改为hamcrest-all
,此问题已解决.
The problem has been resolved by changing hamcrest-library
to hamcrest-all
.
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
更新2:
根据Tunaki的建议,更好的解决方案是从mockito
库中排除传递依赖项hamcrest-core
.因此最终的依赖关系应如下所示:
As per suggested by Tunaki, the better solution would be to exclude the transitive dependency hamcrest-core
from mockito
library. So the final dependencies should look something like as follows:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.10.8</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
推荐答案
您的POM中存在依赖项冲突:
There is a dependency conflict in your POM:
-
mockito-core
1.10.8取决于hamcrest-core
1.1. -
hamcrest-library
1.3取决于hamcrest-core
1.3.
mockito-core
1.10.8 depends onhamcrest-core
1.1.hamcrest-library
1.3 depends onhamcrest-core
1.3.
Maven通过选择版本1.1解决冲突(首先声明,并且它们具有相同的路径).
Maven resolves the conflict by selecting version 1.1 (it is declared first and they have equal path).
您收到此错误,因为hamcrest-library
1.3引用了CombinableMatcher
类版本1.3中确实存在.
You are getting this error because hamcrest-library
1.3 references the CombinableMatcher
class that did not exist in version 1.1 but does exist in version 1.3.
如果您确实依赖Hamcrest 1.3的特定功能,则需要从mockito-core
中排除hamcrest-core
传递依赖项(并希望Hamcrest 1.3与1.1向下兼容).否则,只需删除hamcrest-library
,然后您将依赖于Hamcrest 1.1.
If you really depend on Hamcrest 1.3 specific features, you need to exclude hamcrest-core
transitive dependency from mockito-core
(and hope Hamcrest 1.3 is backwards compatible with 1.1). Otherwise, just remove hamcrest-library
and you will then depend on Hamcrest 1.1.
这篇关于Eclipse:无法解析org.hamcrest.core.CombinableMatcher $ CombinableBothMatcher类型.它是从所需的.class文件中间接引用的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!