Я в своем проекте повторно использую компонент на основе maven с открытым исходным кодом, который включает в себя набор закрашенных (например, с использованием плагина maven-shade) прямых и транзитивных зависимостей в компоненте uber-jar. К сожалению, некоторые из этих зависимостей конфликтуют с зависимостями моего собственного проекта. В частности, зависимости компонента транзитивно включают servlet-api 2.x, тогда как мне нужен 3.x в моем проекте - и они, похоже, находятся в том же пространстве имен. Зависимость верхнего уровня компонента, которая извлекает servlet-api (lucene-demo), на самом деле не нужна для функциональности компонента, поэтому я был бы счастлив удалить ее, если это возможно. Мой проект построен с помощью Gradle.
Каков рекомендуемый способ поведения в подобной ситуации? Есть ли способ удалить нежелательные зависимости из повторно используемого uber-jar, когда я создаю свой собственный проект? Или я должен сам перестроить повторно используемый компонент, исключив неприятную зависимость? Если да, можно ли это сделать автоматически, чтобы мне не нужно было поддерживать собственный форк компонента с открытым исходным кодом? В настоящее время компонент размещен на GitHub и публикуется через Maven Central.
(Как вы понимаете, я немного новичок как в Maven, так и в Gradle, так что не беспокойтесь о том, чтобы что-то упустить).