"необязательная" зависимость с областью действия "предоставляется" в Maven - PullRequest
30 голосов
/ 02 мая 2011

Maven иногда мне не по вкусу ... Я создал библиотеку, которая имеет необязательную зависимость от slf4j и log4j.Под необязательным я имею в виду:

  • Моей библиотеке нужны эти каркасы журналирования во время компиляции
  • Моей библиотеке они не нужны во время выполнения, но если она их "обнаружит",используйте их

В настоящее время я отметил эту зависимость как «необязательную» и «предоставленную»:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
    <type>jar</type>
    <scope>provided</scope>
    <optional>true</optional>
</dependency>

Но некоторые из моих пользователей сообщили о проблемах, потому что они ненужен log4 / slf4j.Правильна ли моя зависимость?К сожалению, я нахожу официальную документацию слишком абстрактной, чтобы понять эту проблему.

1 Ответ

34 голосов
/ 02 мая 2011

Вы проверяли эту документацию.Он очень хорошо описывает ваш вариант использования.Если пометить зависимости как необязательные, они не будут преобразованы в транзитивные зависимости в приложении, которое использует вашу библиотеку (даже если область действия compile).

В отличие от <scope>provided</scope>, который используется для требуемых зависимостей, которые будутпредоставляемая средой выполнения, зависимость <optional>true</optional> не обязательно должна требоваться ( Идея состоит в том, что некоторые зависимости используются только для определенных функций в проекте и не будут необходимы, если эта функция неused. ).

Если проект, который использует вашу библиотеку, будет использовать любую функциональность, предоставляемую необязательными зависимостями, проект должен объявить эти зависимости самостоятельно.

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

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