我们的 maven 存储库当前有两个版本的mockito,这两个版本都作为其他 jar 的依赖项而被拉入,并且每个版本都在不同的子项目中使用。我们的集成测试是一个单独的项目,使用与我们的核心应用程序使用的单元测试不同的版本。
mockito 版本更改了方法的签名,使其无法向后计算。由于每个mockito版本都依赖于jar,所以我很难重新配置maven以在每个项目中仅使用一个版本的mockito。
当我从 eclipse 或命令行直接运行 maven 时,这不是问题,基于 pom 文件的每个项目都使用正确的 mockito 版本。但是,当我尝试在 eclipse 中运行单元测试时,我收到了 NoSuchMethodError,这似乎是由于 eclipse 使用了不正确的 mockito 版本。有没有办法确保我的junit测试使用我想要的mockito版本,也就是pom文件中指定的版本?
最佳答案
您应该做的第一件事是将mockito声明为使用它的模块的直接依赖项,而不是通过传递依赖项来依赖它。 Maven/Eclipse/m2e 应该 first use the version that is declared locally .
如果这无法解决问题,根据我的经验,它可以帮助重新排序 POM 中的依赖项,并随后检查项目资源管理器中的 Maven 依赖项容器或 POM 编辑器中的“依赖项层次结构”选项卡,以查看现在是否使用了正确的版本。通常,尝试将有问题的依赖项移动到依赖项列表中的第一个位置或最后一个位置可以解决问题。
另一个(可能是附加的)选项是向该依赖项添加排除,该依赖项会引入“错误”版本的mockito。再次检查“依赖关系层次结构”选项卡以查看依赖项来自何处。
最后,您应该避免头痛并设置一个项目范围的 dependency management其中涵盖应用程序中的单元测试以及集成测试。
祝你好运;)
关于java - 将 Eclipse 指向 mvn repo 中的正确 jar 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969286/