2010-02-17 3 views
18

Итак, я хотел бы использовать аннотации findbugs для подавления предупреждений, которые мы считаем нормальными.Findbugs Annotations - Мне нужен annotation.jar и jsr305.jar в моем развернутом коде?

Нужно ли развертывать annotation.jar и jsr305.jar в нашей производственной среде или нужны только эти банки в пути к классам для нашего проекта Eclipse и нашей среды сборки unix?

ответ

11

аннотаций имеют различные retention policies:

  • ИСТОЧНИК - не в файле класса, отбрасываются компилятором (не будет необходимости во время выполнения)
  • CLASS - в файле класса, но виртуальная машина может выбросить их прочь
  • RUNTIME - для отражения во время выполнения

логика будет означать, что сохранение ИСТОЧНИК аннотаций не будет необходимости во время выполнения, CLASS не должен, а RUNTIME должен быть быть доступен.

Краткий обзор аннотаций JSR 305 показывает, что они используют политику хранения RUNTIME (example), что указывает на то, что эти банки действительно понадобятся для загрузки классов во время выполнения, чтобы удовлетворить контракт аннотации.

Но я не испытал это сам.

+1

Alex, спасибо за то, что указали мне правильный путь с аннотациями. Я только планирую использовать edu.umd.cs.findbugs.annotations.SuppressWarnings аннотацию, которая имеет сохранение CLASS. Я буду тестировать в ближайшие несколько дней, продвигая некоторые аннотированные файлы в сборку и запуск env. – tinman

+1

Это, к сожалению, неверно. Как указывает [Мэтт Мак-Хенри] (http://stackoverflow.com/a/3577312/1005481), эти аннотации do * not * должны присутствовать во время выполнения. –

8

В соответствии с my related question вы обычно не сталкиваетесь с какими-либо проблемами, если эти аннотации отсутствуют во время выполнения, хотя некоторые из них имеют @Retention(RUNTIME).