2016-06-02 19 views
18

Do tej pory używaliśmy adnotacji Findbugs JSR-305 (com.google.code.findbugs: jsr305) i wszystko, łącznie ze wsparciem narzędzi (Sonar, Eclipse, Findbugs, ...) zostało Dobrze pracować.Adnotacje JSR-305 zamiennik dla Javy 9

Jednak rozumiemy, że Jigsaw w Javie 9 złamie adnotacje JSR-305 (jeden pakiet w dwóch modułach jest niedozwolony). Zostało to potwierdzone na JavaOne 2015. Rozumowanie Oracle brzmi: JSR-305 nigdy się nie wydarzyło, a JSR-250 musiałby zatwierdzić te adnotacje.

Szukamy zamienników dla adnotacji JSR-305, które działają zarówno w języku Java 8, jak i Java 9. Jeśli historia jest jakąkolwiek instrukcją, czas między Java 9 GA i Java 8 EOL będzie raczej krótki i chcielibyśmy naprawić wszelkie niezgodności w naszym kodzie z góry. Teoretycznie moglibyśmy ulepszyć moduł adnotacji JDK, ale zrobienie tego w naszym pakiecie narzędzi wydaje się dużym nakładem pracy.

+0

Zadałem pytanie, które ostatnio podążało w tym samym kierunku ([Przyszłościowa adnotacja @NonNull] (http://stackoverflow.com/questions/35892063/which-nonnull-java-annotation-to-use)) jednak pojawiło się pytanie szybko zamknięty. Nadal uważam, że ludzie są zainteresowani odpowiedzią. – Lonzak

Odpowiedz

22

To prawda, że ​​dwa moduły nie mogą zazwyczaj definiować typów w tym samym pakiecie . Do niedawna umieszczenie jsr305.jar na ścieżce klasy z JDK   9 build miałoby żadnego wpływu: To plik JAR definiuje typy w pakiecie javax.annotation jednak, że pakiet jest zdefiniowana w platformie wbudowanej java.annotations.common modułu, a ten ostatni trwa precedens.

Dzięki w części do powszechnego stosowania jsr305.jar jednak, a także ułatwić istniejące serwery aplikacji do migracji do JDK niedawno zmienił domyślny zestaw modułów korzeniowych do wyłączenia modułu adnotacji , pośród innych. Umieszczanie jsr305.jar na ścieżce klasy JDK jest teraz gotowe do użycia. Szczegóły są dostępne w JEP 261.

+0

Dziękuję, to jest dobre nowe. –

+2

Czy to oznacza, że ​​nie mogę używać '@ Nonnull' i' @ PostConstruct' w tym samym projekcie? – jkschneider

+0

Sądzę, że możesz stworzyć niestandardowy moduł z adnotacjami 'java.annotations.common' i' jsr305.jar', jeśli zajdzie taka potrzeba. –

Powiązane problemy