Следует ли обрабатывать исключения в дочернем или родительском поме? - PullRequest
0 голосов
/ 10 июня 2018

Я обычно нахожусь в такой ситуации, когда я работаю над парой проектов, которые все зависят от одного и того же родительского партнера.Мы обрабатываем все наши версии и исключения зависимостей в разделе dependencyManagement родительского pom.Дочерние poms будут определять зависимости, которые им нужны, но они будут использовать версию от родителя.

Когда мы помещаем исключение в банку, это обычно происходит потому, что мы хотим получить другую версию этой банки отгде-то еще (обычно это другая банка, от которой мы зависим).

Однако я столкнулся с проблемой.Допустим, у вас есть два jar A и B в родительском объекте, которые зависят от разных версий jar C. Кто-то, работающий над дочерним проектом, может нуждаться в обоих jar A и B, а затем может перейти в родительский, исключая jar C из jar B.может работать хорошо для них.Однако кто-то еще, кто работает над другим дочерним проектом, может зависеть только от jar B, и теперь его проект может получить NoClassDefFoundError во время выполнения после того, как он получит последний родительский код из-за потери jar C. Теперь, возможно, третий человек, которыйПозже, работая над другим дочерним проектом, решает, что им нужна банка B (а не банка A), поэтому они добавляют банку B. Если они не уделяют пристального внимания, они могут не осознавать, что у них нет банки C, которая нужна банке.B. Во время выполнения они могут получить NoClassDefFoundError.

Как вы можете видеть, любой дочерний проект, который нуждается в jar A и jar B, подойдет, но любой дочерний проект, который нуждается только в jar B, должен помнить, чтобы добавить jar Cк их поме тоже.

Лучше ли делать исключения только в детском поме?Или я должен продолжать пытаться иметь исключения в родительском pom и убедиться, что просто внимательно посмотрел на исключения и добавил дополнительные зависимости к дочернему pom по мере необходимости?Спасибо!

1 Ответ

0 голосов
/ 14 июня 2018

Используйте dependencyManagement в родительском элементе только для версий, а не для исключений (и не для области).Как вы сами указываете, добавление исключений в родительский элемент может привести к ситуациям, когда другие разработчики (и, возможно, даже вы сами) в более поздний момент времени запутываются в том, почему они не получают необходимые и ожидаемые переходные зависимости.

Относительно:

Когда мы помещаем исключение в банку, это обычно происходит потому, что мы хотим получить другую версию этой банки из другого места (обычно это другая банка, от которой мы зависим).

Вы можете принудительно установить правильную версию для этих переходных зависимостей в родительском модуле, чтобы избежать исключений по той причине, которую вы здесь указали.Недостатком является то, что вы должны помнить, чтобы обновить эти версии при обновлении версии зависимой библиотеки.Вот как мы управляем нашим проектом с> 200 poms, и я должен сказать, что это гораздо лучше, чем выяснить, куда добавлять исключения, чтобы надеяться получить правильную версию всех зависимостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...