org.hamcrest isNotNullValue(): 当多个依赖共存时导入哪个

org.hamcrest isNotNullValue(): which to import when multiple dependencies coexist

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

如你所见,我有:

我应该导入哪一个?

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

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

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

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