org.hamcrest isNotNullValue(): 当多个依赖共存时导入哪个
org.hamcrest isNotNullValue(): which to import when multiple dependencies coexist
我这里有依赖共存:isNotNullValue()
方法存在于我的 Spring 启动应用程序的不同 jar 中,这张图片显示了我现在得到的内容:
如你所见,我有:
wiremock.org.hamcrest.core.IsNull
wiremock.org.hamcrest.CoreMatchers
org.hamcrest.core.IsNull
org.hamcrest.Matchers
org.hamcrest.CoreMatchers
我应该导入哪一个?
我猜 hamcrest-library
是正确的 jar,但我不确定。
在以下情况下要遵循的一些准则:
- 相同的方法同时存在于多个 jar 中,有些应该被隐藏但没有(如
wiremock.org.hamcrest
)
- 相同的方法存在于几个具有相同依赖性的不同 jar 中,如
hamcrest-core
和 hamcrest-library
?
在所有 hamcrest 建议中,我几乎总是最终使用的建议来自 org.hamcrest.CoreMatchers
。 isNull
和 is
方法。
您看到类似 class 层次结构的原因是因为 wiremock
库已经将兼容版本的 hamcrest 与它们一起着色。有时您构建的库依赖于特定版本的依赖项,但用户可能拥有该库的不同版本,这可能与您的不兼容。虽然代码可能会编译,但在 运行 时可能会在运行时失败。这可能发生在最广泛使用的库中,例如 Guava(在 elasticsearch 中),在您的情况下是 hamcrest(在 wiremock 中)。该问题的解决方案是隐藏依赖项的版本以及不同的包名称,这样它们就不会对用户造成冲突或运行时问题。权衡是您的工件变得稍微重一些,因为它们还包含您的依赖项。
我这里有依赖共存:isNotNullValue()
方法存在于我的 Spring 启动应用程序的不同 jar 中,这张图片显示了我现在得到的内容:
如你所见,我有:
wiremock.org.hamcrest.core.IsNull
wiremock.org.hamcrest.CoreMatchers
org.hamcrest.core.IsNull
org.hamcrest.Matchers
org.hamcrest.CoreMatchers
我应该导入哪一个?
我猜 hamcrest-library
是正确的 jar,但我不确定。
在以下情况下要遵循的一些准则:
- 相同的方法同时存在于多个 jar 中,有些应该被隐藏但没有(如
wiremock.org.hamcrest
) - 相同的方法存在于几个具有相同依赖性的不同 jar 中,如
hamcrest-core
和hamcrest-library
?
在所有 hamcrest 建议中,我几乎总是最终使用的建议来自 org.hamcrest.CoreMatchers
。 isNull
和 is
方法。
您看到类似 class 层次结构的原因是因为 wiremock
库已经将兼容版本的 hamcrest 与它们一起着色。有时您构建的库依赖于特定版本的依赖项,但用户可能拥有该库的不同版本,这可能与您的不兼容。虽然代码可能会编译,但在 运行 时可能会在运行时失败。这可能发生在最广泛使用的库中,例如 Guava(在 elasticsearch 中),在您的情况下是 hamcrest(在 wiremock 中)。该问题的解决方案是隐藏依赖项的版本以及不同的包名称,这样它们就不会对用户造成冲突或运行时问题。权衡是您的工件变得稍微重一些,因为它们还包含您的依赖项。