Замена аннотаций 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 build не будет иметь никакого эффекта: этот файл JAR определяет типы в javax.annotation, но этот пакет определен на встроенной платформе java.annotations.common, и последнее имеет приоритет.

Отчасти благодаря широкомасштабному использованию jsr305.jar, а также к упростить для существующих серверов приложений переход на JDK 9, мы недавно изменили набор корневых модулей по умолчанию, чтобы исключить модуль аннотаций, среди прочих. Помещение jsr305.jar на JDK 9 class path теперь работает из коробки. Подробности доступны в JEP 261.