Java 9 的 JSR-305 注释替换

JSR-305 annotations replacement for Java 9

到目前为止,我们一直在使用 Findbugs JSR-305 注释 (com.google.code.findbugs:jsr305),包括工具支持(Sonar、Eclipse、Findbugs……)在内的一切都运行良好。

然而,据我们了解,Java 9 中的 Jigsaw 将破坏 JSR-305 注释(不允许在两个模块中使用一个包)。这在 JavaOne 2015 得到证实。Oracle 的推理是 JSR-305 从未发生,JSR-250 必须认可这些注释。

我们正在寻找可在 Java 8 和 Java 9 中使用的 JSR-305 注释的替代品。如果历史可以指导 Java 9 GA 和 Java 9 之间的时间Java 8 EOL 会很短,我们想提前修复代码中的任何不兼容问题。理论上我们可以升级 JDK 的注释模块,但在我们的工具链中执行此操作似乎需要大量工作。

确实,两个模块通常不能在同一个文件中定义类型 包裹。直到最近,将 jsr305.jar 放在 class 路径上 JDK 9 build 无效:该 JAR 文件在 javax.annotation 包,但该包是在平台的内置中定义的 java.xml.ws.annotation模块,后者优先

然而,部分由于 jsr305.jar 的广泛使用,同时也使 现有应用程序服务器更容易迁移到 JDK 9,我们更改了 默认的根模块集,排除注释模块,其中 其他。将 jsr305.jar 放在 JDK 9 class 路径上开箱即用 同时使用 JDK 9 和 JDK 10;详情可在 JEP 261。还会继续 开箱即用地使用自注释模块以来的更高版本,以及 与所有其他 Java EE 和 CORBA 模块一起在 JDK 11 中删除 每 JEP 320.