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

查看:529
本文介绍了Eclipse:无法解析org.hamcrest.core.CombinableMatcher $ CombinableBothMatcher类型.它是从所需的.class文件中间接引用的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用TestNGMockitoSpring 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 on hamcrest-core 1.1.
  • hamcrest-library 1.3 depends on hamcrest-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

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆