Spring boot org.hamcrest isNotNullValue():当多个依赖项共存时要导入的

Spring boot org.hamcrest isNotNullValue():当多个依赖项共存时要导入的,spring-boot,dependency-management,hamcrest,Spring Boot,Dependency Management,Hamcrest,我在这里有一个依赖共存:isNotNullValue()方法存在于我的Spring Boot应用程序的不同JAR中,下面的图片显示了我现在得到的结果: 如你所见,我有: wiremock.org.hamcrest.core.IsNull wiremock.org.hamcrest.CoreMatchers org.hamcrest.core.IsNull org.hamcrest.Matchers org.hamcrest.CoreMatchers 我应该进口哪一种 我想hamcrest库

我在这里有一个依赖共存:
isNotNullValue()
方法存在于我的Spring Boot应用程序的不同JAR中,下面的图片显示了我现在得到的结果:

如你所见,我有:

  • wiremock.org.hamcrest.core.IsNull
  • wiremock.org.hamcrest.CoreMatchers
  • org.hamcrest.core.IsNull
  • org.hamcrest.Matchers
  • org.hamcrest.CoreMatchers
我应该进口哪一种

我想hamcrest库是正确的jar,但我不确定

以下情况下应遵循的一些准则:

  • 相同的方法同时存在于多个jar中,而有些jar应该被隐藏,但不应该(如
    wiremock.org.hamcrest
  • 相同的方法存在于几个具有相同依赖性的不同jar中,如
    hamcrest核心
    hamcrest库

?

在所有的hamcrest建议中,我最后几乎总是使用的建议来自
org.hamcrest.CoreMatchers
。对于
isNull
is
方法


您看到类似类层次结构的原因是
wiremock
library附带了兼容版本的hamcrest。有时,您构建的库依赖于依赖项的特定版本,但用户可能具有与您的库不兼容的该库的不同版本。虽然代码可能会编译,但在运行时可能会失败。这可能发生在大多数广泛使用的库中,如Guava(在elasticsearch中)和hamcrest(在wiremock中)。该问题的解决方案是使用不同的包名来隐藏依赖项的版本,这样它们就不会给用户造成冲突或运行时问题。取舍是您的工件变得稍微重一些,因为它们也包含您的依赖项

是的,谢谢。我知道,
wiremock
可能会使用他版本的
hamcrest
,但正如你所说,他们可以遮住它,不让我知道。好的,我们已经放弃了
wiremock
,但另一个问题是在
core-1.3
library-1.3
之间选择哪个jar,在
CoreMatcher
Matcher
之间选择哪个jar?有什么理由要选择吗?hamcrest的“核心”版本包含了一组基本的匹配器和抽象方法来构建更多的匹配器。hamcrest的“库”版本包含了更多实现的匹配器
CoreMatchers
包含一组较小的匹配器,而后者包含更多的匹配器。我想这主要归结于偏好。对于重叠的方法,它们本质上是一样的。哦,我不知道。我想我可能会选择
library
jar。谢谢