【问题标题】:org.hamcrest isNotNullValue(): which to import when multiple dependencies coexistorg.hamcrest isNotNullValue():当多个依赖共存时导入哪个
【发布时间】:2019-05-12 09:40:45
【问题描述】:

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

如你所见,我有:

  • wiremock.org.hamcrest.core.IsNull
  • wiremock.org.hamcrest.CoreMatchers
  • org.hamcrest.core.IsNull
  • org.hamcrest.Matchers
  • org.hamcrest.CoreMatchers

我应该导入哪个?

我猜hamcrest-library 是正确的罐子,但我不确定。

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

  • 相同的方法同时存在于几个 jar 中,而有些应该被遮蔽但不是(就像在 wiremock.org.hamcrest 中一样)
  • 相同的方法存在于几个具有相同依赖关系的不同jar中,如hamcrest-corehamcrest-library

【问题讨论】:

    标签: spring-boot dependency-management hamcrest


    【解决方案1】:

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

    您看到类似的类层次结构的原因是因为wiremock 库已将兼容版本的 hamcrest 与它们一起着色。有时您构建的库依赖于特定版本的依赖项,但用户可能拥有该库的不同版本,可能与您的不兼容。虽然代码可能会编译,但运行时可能会在运行时失败。这可能发生在最广泛使用的库中,例如 Guava(在 elasticsearch 中),在您的情况下是 hamcrest(在 wiremock 中)。该问题的解决方案是将依赖项的版本与不同的包名称一起隐藏,这样它们就不会给用户造成冲突或运行时问题。权衡是您的工件变得稍微重一些,因为它们还包含您的依赖项。

    【讨论】:

    • 好的,谢谢。我知道wiremock 可能会使用他的hamcrest 版本,但正如你所说,他们可以遮蔽它并且不要让我知道。好的,所以我们已经丢弃了wiremock,但另一个是在core-1.3library-1.3 之间选择哪个jar,在CoreMatcherMatcher 之间选择哪个?有什么选择的理由吗?
    • hamcrest 的“核心”版本包含一组基本的匹配器和用于构建更多匹配器的抽象方法。 hamcrest 的“库”版本包含更多实现的匹配器。 CoreMatchers 包含一组较小的匹配器,而后者包含更多。我想这主要归结为偏好。对于重叠的方法,它们本质上是一样的。
    • 哦,我不知道。我想我可能会选择library jar。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 2020-12-28
    • 2020-12-20
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多