org.hamcrest isNotNullValue (): который нужно импортировать, когда сосуществуют несколько зависимостей - PullRequest
1 голос
/ 12 мая 2019

У меня есть сосуществование зависимостей здесь: isNotNullValue() метод существует в разных банках в моем приложении Spring Boot, и на этом рисунке показано, что я получаю сейчас:

enter image description here

Как видите, у меня есть:

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

Какой я должен импортировать?

Я думаю, hamcrest-library - это правильная банка, но я не уверен.

Некоторые рекомендации, которым нужно следовать, когда:

  • один и тот же метод существует одновременно в нескольких банках, в то время как некоторые должны быть затенены, но нет (как в wiremock.org.hamcrest)
  • тот же метод существует внесколько разных банок с одинаковой зависимостью, как в hamcrest-core и hamcrest-library

?

1 Ответ

1 голос
/ 12 мая 2019

Среди всех предложений о хамкресте я почти всегда заканчиваю с org.hamcrest.CoreMatchers.Оба для isNull и is методов.

Причина, по которой вы видите похожую иерархию классов, заключается в том, что библиотека wiremock затеняла совместимую версию hamcrest вместе с ними.Иногда вы создаете библиотеку, которая зависит от конкретной версии зависимостей, но пользователи могут иметь другую версию этой библиотеки, которая может быть несовместима с вашей.Хотя код может скомпилировать, во время выполнения могут произойти сбои.Это может случиться с наиболее широко используемыми библиотеками, такими как Guava (вasticsearch) и в вашем случае hamcrest (в wiremock).Решение этой проблемы состоит в том, чтобы скрыть версию ваших зависимостей вместе с другим именем пакета, чтобы они не вызывали конфликтов или проблем во время выполнения для пользователей.Компромисс в том, что ваш артефакт становится немного тяжелее, так как они также содержат ваши зависимости.

...