Замена аннотаций 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.