annotations - Reemplazo de anotaciones JSR-305 para Java 9
static-analysis java-9 (1)
Es verdad que dos módulos no pueden, por lo general, definir tipos en el mismo paquete. Hasta hace poco, colocar jsr305.jar
en la ruta de clase de una compilación JDK 9 no tendría ningún efecto: ese archivo JAR define los tipos en el paquete javax.annotation
, pero ese paquete está definido en el módulo java.annotations.common
incorporado de la plataforma, y el último tiene prioridad.
Sin embargo, debido en parte al uso generalizado de jsr305.jar
y también a que los servidores de aplicaciones existentes migren a JDK 9, hemos cambiado recientemente el conjunto predeterminado de módulos raíz para excluir el módulo de anotaciones, entre otros. Poner jsr305.jar
en la ruta de la clase JDK 9 ahora funciona de fábrica. Los detalles están disponibles en JEP 261 .
Hasta ahora hemos estado usando las anotaciones de Findbugs JSR-305 (com.google.code.findbugs: jsr305) y todo lo que incluye el soporte de herramientas (Sonar, Eclipse, Findbugs, ...) ha funcionado bien.
Sin embargo, entendemos que Jigsaw en Java 9 va a romper las anotaciones JSR-305 (no se permite un paquete en dos módulos). Esto fue confirmado en JavaOne 2015. El razonamiento de Oracle es que JSR-305 nunca sucedió y JSR-250 debería respaldar estas anotaciones.
Estamos buscando reemplazos para las anotaciones JSR-305 que funcionan tanto en Java 8 como en Java 9. Si la historia sirve de guía, el tiempo entre Java 9 GA y Java 8 EOL será bastante breve y nos gustaría corregir cualquier incompatibilidad en nuestro código por adelantado. En teoría, podríamos actualizar el módulo de anotaciones del JDK, pero hacerlo a través de nuestra cadena de herramientas parece mucho trabajo.