Аннотации имеют различную политику хранения :
- SOURCE - отсутствует в файле класса, отбрасывается компилятором (не требуется во время выполнения)
- CLASS - в файле класса, но виртуальная машина может их выбросить
- RUNTIME - доступно для отражения во время выполнения
Логика будет означать, что аннотации хранения SOURCE не потребуются во время выполнения, CLASS не должен , а RUNTIME должен быть доступным.
Быстрый взгляд на аннотации JSR 305 показывает, что они используют политику хранения RUNTIME ( пример ), которая указывает мне, что эти jar-файлы действительно понадобятся для загрузки классов во время выполнения для удовлетворения аннотации. договор.
Но я на самом деле не проверял это сам.