2016-06-02 17 views
18

Bis jetzt haben wir die Findbugs JSR-305 Annotationen (com.google.code.findbugs: jsr305) und alles einschließlich Tool-Unterstützung (Sonar, Eclipse, Findbugs, ...) wurde funktioniert gut.JSR-305 Annotations Ersatz für Java 9

Wir gehen jedoch davon aus, dass Jigsaw in Java 9 JSR-305-Annotationen bricht (ein Paket in zwei Modulen ist nicht erlaubt). Dies wurde auf JavaOne 2015 bestätigt. Die Argumentation von Oracle ist, dass JSR-305 nie passiert ist und dass JSR-250 diese Anmerkungen unterstützen müsste.

Wir suchen nach Ersatz für JSR-305-Annotationen, die sowohl in Java 8 als auch in Java 9 funktionieren. Wenn Geschichte eine Richtlinie ist, wird die Zeit zwischen Java 9 GA und Java 8 EOL ziemlich kurz sein und wir möchten es beheben Inkompatibilitäten in unserem Code im Voraus. Theoretisch könnten wir das Annotations-Modul des JDK aufrüsten, aber dies in unserer Toolchain zu tun, scheint eine Menge Arbeit zu sein.

+0

Ich fragte vor kurzem eine Frage in die gleiche Richtung ([futureproof @NonNull Annotation] (http://StackOverflow.com/Questions/35892063/which-nonnull-Java-annotation-to-use)) aber die Frage bekam schnell geschlossen. Ich glaube immer noch, dass die Leute an der Antwort interessiert sind. – Lonzak

Antwort

22

Es stimmt, dass zwei Module normalerweise keine Typen im selben Paket definieren können. Bis vor kurzem setzt jsr305.jar auf dem Klassenpfad eines JDK   9 Build hätte keine Auswirkung haben: Die JAR-Datei definiert Typen im javax.annotation Paket aber das Paket wird in der Plattform definiert integrierte in java.annotations.common Modul, und diese nimmt Vorrang.

teilweise auf den weit verbreiteten Einsatz Aufgrund von jsr305.jar, aber, und auch machen es einfacher für bestehende Anwendungsserver JDK zu migrieren   9, wir vor kurzem geändert den Standardsatz von Root-Module der Anmerkungen Modul auszuschließen , unter anderen. Putting jsr305.jar auf dem JDK Klassenpfad funktioniert jetzt out-of-the-Box. Details sind in JEP 261 verfügbar.

+0

Danke, das ist gut neu. –

+2

Bedeutet das, dass ich '@ Nonnull' und' @ PostConstruct' nicht im selben Projekt verwenden kann? – jkschneider

+0

Ich denke, Sie können ein benutzerdefiniertes Modul mit sowohl 'java.annotations.common'- als auch' jsr305.jar'-Annotationen erstellen, falls solche auftreten sollten. –