Замена аннотаций JSR-305 для Java 9
До сих пор мы использовали аннотации Findbugs JSR-305 (com.google.code.findbugs:jsr305), и все, включая поддержку инструментов (Sonar, Eclipse, Findbugs, …), работало нормально.
Однако мы понимаем, что Jigsaw в Java 9 нарушит аннотации JSR-305 (один пакет в двух модулях не допускается). Это было подтверждено на JavaOne 2015. По мнению Oracle, JSR-305 никогда не было, и JSR-250 должен был бы поддержать эти аннотации.
Мы ищем замены для аннотаций JSR-305, которые работают как в Java 8, так и в Java 9. Если история является какой-либо ориентиром, то время между Java 9 GA и Java 8 EOL будет довольно коротким, и мы хотели бы исправить любые несовместимости в нашем код заранее. Теоретически мы могли бы обновить модуль аннотаций JDK, но сделать это через наш набор инструментов кажется большой работой.
1 ответ
Это правда, что два модуля, как правило, не могут определять типы в одном пакете. До недавнего времени jsr305.jar
на путь к классу сборки JDK 9 не будет иметь никакого эффекта: этот файл JAR определяет типы вjavax.annotation
пакет, но этот пакет определен во встроенной платформеjava.annotations.common
модуль, и последний имеет приоритет.
Частично благодаря широкому использованию jsr305.jar
Однако, а также чтобы облегчить миграцию существующих серверов приложений на JDK 9, мы изменили набор корневых модулей по умолчанию, чтобы исключить модуль аннотаций, среди прочего. Ввод jsr305.jar
на пути к классам JDK 9 работает "из коробки" как с JDK 9, так и с JDK 10; подробности доступны в JEP 261. Он будет продолжать работать "из коробки" с более поздними выпусками, поскольку модуль аннотаций вместе со всеми другими модулями Java EE и CORBA был удален в JDK 11 для JEP 320.