首页 文章

JSR-305注释替代Java 9

提问于
浏览
20

到目前为止,我们一直在使用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 8 EOL之间的时间将相当短,我们想修复我们的任何不兼容性提前编码 . 从理论上讲,我们可以升级JDK的注释模块,但是在我们的工具链中执行此操作似乎需要做很多工作 .

1 回答

  • 28

    确实,两个模块通常不能在同一个包中定义类型 . 直到最近,将 jsr305.jar 放在JDK 9构建的类路径上才会起作用:该JAR文件定义 javax.annotation 包中的类型,但该包在平台的内置 java.annotations.common 模块中定义,后者优先 .

    但是,部分由于 jsr305.jar 的广泛使用,并且为了使现有应用程序服务器更容易迁移到JDK 9,我们更改了默认的根模块集以排除注释模块等 . 将 jsr305.jar 放在JDK 9类路径上与JDK 9和JDK 10一起开箱即用;详情请参阅JEP 261 . 由于注释模块以及所有其他Java EE和CORBA模块在JDK 11中按照JEP 320删除,因此它将继续与后续版本一起开箱即用 .

相关问题