2014-11-11 2 views
12

Я хочу использовать библиотеку, которая имеет следующую зависимость:Какова правильная область аннотаций поисковых машин 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.

+0

Вы говорите, что библиотека, которую вы хотите использовать, вытаскивает Findbugs в качестве транзитивной зависимости? Также - не могли бы вы пояснить, что вы подразумеваете под «безопасным»? – user944849

+0

@ user944849 Да, findbugs становится транзитивной зависимостью в моем проекте. С безопасностью я имею в виду, что библиотека должна работать и не печатать ошибки о пропущенных классах. – holmis83

ответ

2

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

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

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

+5

Примечание для всех, кто приходит, НЕ БЕЗОПАСНО исключить библиотеку, исключив ее из POM. Он должен быть там, но он должен иметь «scope = provided». Я читал этот ответ слишком быстро, полностью исключал его из ПОМ, а затем имел проблемы. –

15

Да, вы можете смело исключить эту библиотеку. Он содержит только аннотации, которые не должны присутствовать во время выполнения. Позаботьтесь, чтобы они были доступны для анализа 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> 

Оба баночки требуется, чтобы сделать эти аннотации работать.

Проверьте most recent findbugs version в Maven Central.

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