Вы должны , а не связать любые сторонние банки в вашу собственную банку как банку uber, но было бы хорошо включить копию всех банок, которые требуются в вашем дистрибутиве, скажем, в lib каталог или что-нибудь.
Основная причина этого заключается в том, что ваши клиенты могут использовать какую-либо форму системы управления зависимостями (maven / ivy и т. Д.), А предоставление пакетов и классов, которые на самом деле не принадлежат вашему проекту, лишит законной силы эти схемы.
Существует одна альтернатива: использовать плагин maven shade для перемещения ваших зависимостей в пространство имен вашего пакета. Это, конечно, имеет недостаток, заключающийся в том, что вы увеличите размер кода своей библиотеки, но, с другой стороны, вы можете почти гарантировать версии своих зависимостей, не влияя на любые другие библиотеки, которые могут использовать ваши клиенты.
РЕДАКТИРОВАТЬ: в ответ на комментарий Маркуса Леона:
Возможные решения без комплектации / перемещения:
- Документация, убедитесь, что вы документируете свои зависимости и любые известные конфликты с предыдущими версиями - на самом деле никто не читает ее
- Распространяйте свою библиотеку через управляемую систему зависимостей ... как репозиторий maven или ivy, они позволяют вам задавать в очень специфический набор границ (включая верхний), каковы ваши зависимости - все еще могут быть переопределены только вашими клиентами знаю, что они делают это
- Добавление информации OSGi в MANIFEST.MF - полезно, только если ваши клиенты действительно используют OSGi
- Если ваши зависимости были построены с использованием maven или в файлах манифеста есть информация о версии, вы можете написать какую-нибудь процедуру проверки, которая сканирует путь к классам для них и проверяет там версии - немного экстремально
В конце концов, чрезвычайно трудно убедиться, что у вас есть зависимости, которые вы хотите, поскольку java - язык с поздним связыванием, возможно, что ваши зависимости (даже если они связаны) будут переопределены кем-то, включая другую версию, перед вашей на пути к классам ,
Примечание: я недавно провел очень плохой день, пытаясь выяснить, почему одному из наших приложений не удалось найти новую версию log4j. причина: кто-то пытался быть полезным, сложил его в случайную, совершенно не связанную банку.