Возможно, пример поможет. У нас был сценарий использования этого недавно.
У нашей зависимости (которая была довольно большой, но от которой нам потребовалась всего пара изолированных методов) была зависимость от Rhino , но мы не приблизились бы к частям, касающимся носорога кода.
В нашем модуле мы включали YUI Compressor . По какой-то причине обе библиотеки имеют одно и то же полностью определенное имя класса, но с немного отличающимися сигнатурами методов.
Результатом было то, что, включая транзитивную зависимость Rhino сломал функциональность, которая ранее работала. Компрессор YUI вызвал исключительную ситуацию времени выполнения, поскольку подпись метода отличалась от ожидаемой.
Решением было явное исключение Rhino.
Как правило, вам не нужно исключать зависимости. Обычно это происходит из-за плохо спроектированных модулей.
Например, если модуль становится слишком большим, большинству пользователей может понадобиться только часть их классов или методов, поэтому не все их зависимости будут строго требоваться. В этом случае разработчикам библиотеки, вероятно, следует разбить модуль на набор более мелких модулей.
Наличие одинакового полностью квалифицированного имени класса в двух разных библиотеках кажется плохим решением для проектирования.