Что такое правильная область аннотаций для поисковых машин Maven?

Я хочу использовать библиотеку, которая имеет следующую зависимость:

<dependency>
  <groupId>com.google.code.findbugs</groupId>
  <artifactId>annotations</artifactId>
  <version>2.0.3</version>
</dependency>

Я читал, что FindBugs предназначен для статического анализа кода Java, поэтому я не хочу включать его в приложение. Безопасно ли исключить банку с помощью <scope>provided</scope> или с помощью <exclusion>...</exclusion>?

Одна из причин, почему это исключается, заключается в том, что существует политика компании против (L) лицензии GPL.

Ответ 1

В теории, он должен быть полностью безопасным (как определено в пояснительном комментарии OP), чтобы исключить транзитивную зависимость Findbugs. Если они используются правильно, Findbugs следует использовать только при создании библиотеки, а не при ее использовании. Вероятно, кто-то забыл добавить <scope>test</scope> к зависимости Findbugs.

Итак - продолжайте и попробуйте исключение. Запустите приложение. Получаете ли вы ошибки в классе, функциональные возможности приложения, связанные с библиотекой, которая не работает, или видят сообщения в журналах, которые, по-видимому, связаны с тем, что у вас нет Findbugs? Если да, то я лично переосмыслил бы использование этой конкретной библиотеки в своем приложении и попытался бы найти альтернативу.

Кроме того, поздравляю вас с проверкой класса! Как общая практика, отличная идея делать то, что вы делали каждый раз, когда вы добавляете библиотеку в приложение: добавьте библиотеку, затем проверьте, какие другие транзитивные зависимости она приносит, и выполните любую необходимую очистку классов в начале, Когда я это делаю, я нахожу, что мои сеансы отладки намного короче.

Ответ 2

Да, вы можете смело исключить эту библиотеку. Он содержит только аннотации, которые не должны присутствовать во время выполнения. Позаботьтесь, чтобы они были доступны для анализа FindBugs.

Обратите внимание, что вы также должны указать jsr305.jar, например:

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>annotations</artifactId>
    <version>3.0.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>3.0.2</version>
    <scope>provided</scope>
</dependency>

Оба JAR должны делать эти аннотации работающими.

Отметьте самую последнюю версию поиска в Maven Central.

FindBugs предоставляется под LGPL, поэтому не должно быть никаких проблем для вашей компании. Кроме того, вы просто используете FindBugs; вы не разрабатываете что-то, полученное из FindBugs.