зависимости для библиотеки jar с использованием gradle

Я использую gradle 6.7 и создаю проект библиотеки, который компилируется в банку, которая помещается в мой собственный репозиторий артефактов s3.

В моем проекте есть зависимости от других артефактов, и я использую зависимость implementation.

Создается jar (не толстый jar) и загружается в репозиторий s3.

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

Мой вопрос в том, стоит ли создавать толстую банку? Я не думаю, что другие библиотеки (например, springboot и другие) используют толстые банки, верно? однако, когда я использую их как зависимость, во время выполнения обнаруживаются другие зависимости.

Означает ли это, что использование реализации в моем проекте для других зависимостей — неправильный путь? мне использовать что-то другое? Не могли бы вы рассказать немного больше о том, как правильно?

Спасибо


person user1002065    schedule 29.12.2020    source источник


Ответы (1)


Ознакомьтесь с плагином библиотеки Java для gradle. Он существует именно для этой ситуации.

Если зависимость вашей библиотеки должна быть представлена ​​потребителю вашей библиотеки, вы должны использовать api вместо implementation. В документации плагина есть хороший раздел здесь, который может использоваться, чтобы помочь вам определить, когда объявлять зависимость как api, а когда implementation.

person Zack    schedule 29.12.2020