JSR 305 的状态如何?

Posted

技术标签:

【中文标题】JSR 305 的状态如何?【英文标题】:What is the status of JSR 305? 【发布时间】:2011-01-18 09:10:47 【问题描述】:

我看到了JSR305 vs. JSR308 (Java Type Anotations) - Which is going to be the standard? 的问题,我理解JSR 308 和JSR 305 之间的区别。

我也明白了,这个时候Java 7 308 是预定的,305 不是,我很好奇305 的整体状态。

具体来说,我在我的一些项目中使用Google Collections 和JSR-305(以类似于one of the Guice best practices advocates 的方式)并且想知道我是否应该使用更“未来方向”友好的方法反而。我也打算在 JSR-305 小组上询问这个问题,但该小组没有太多活动,我只是想知道这里是否有人有更多信息。

【问题讨论】:

我会接受你离开 Kevin 的答案,但我在那些文章中找不到明确表示它们将在 Java 7 中的位置,或者不是? (并且在实际发布问题之前,我已经简要地查看了该信息。)您是否在其中看到具体提及他们包括在内(如您的回答中所示)?提前感谢您的帮助。 经过这么长时间,以及一些其他努力弄清楚到底发生了什么,我授予最佳答案,唯一的答案,“答案”的区别。 ;) Java 9:***.com/questions/37598775/… Mark Reinhold recently commented on another SO post that “JSR 305,它本来可以标准化 javax.annotation.NonNull,因为它的规范领导退出了,所以从未完成。” 【参考方案1】:

正如answer 中所述,JSR-305 提出了新的注解,例如@NonNull,而JSR-308 提出允许在新的地方注解,例如泛型声明。

引用JSR 308页面:

…本文档不提出任何注释,只是指定它们可以出现在 Java 代码中的什么位置。

JSR 308(新位置的注释)包含在java 8 中的JEP 104 下。

截至 2017 年,JSR 305(新注解)继续保持“休眠”的官方状态。自 2010 年以来,关于它在 google 群组中的状态的 question 一直没有得到答复。

有一个 JSR-305 注释 here 的参考实现,它被许多项目使用,包括番石榴。使用 maven,您可以通过将其添加到您的 pom 中来使用 JSR-305 参考实现:

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>3.0.0</version>
</dependency>

【讨论】:

链接到com.google.code.findbugs:jsr305 on maven central(最新版本现在是3.0.0) 您可以使用与findbugs-maven-plugin(来自org.codehaus.mojo)相同的版本来同步两者。 Java 9 功能完整但尚未发布,看起来好像没有包含 JSR-305。是否有另一个 JSR 添加了类似的注释?【参考方案2】:

JSR 305 不会成为 Java 8 的一部分:

Java 8 是 still scheduled for March 18, 2014。 JSR 305 remains dormant as of March 5, 2014。

【讨论】:

对于 JSR-308 有一个常见问题解答:types.cs.washington.edu/jsr308/current/…【参考方案3】:

JSR 337 描述了 Java 8:规范已达到最终状态:see here。

JSR 308 肯定在 JSR 305 肯定出局了

【讨论】:

【参考方案4】: JSR 305 is Dormant的状态。 JSR 305 与FindBugs project 紧密相连。 FindBugs 项目was announced as dead。 FindBugs 的继任者是SpotBugs。 它是由前members of the FindBugs development team 之一的 Andrey Loskutov “分支”的。 Announcement of the SpotBugs project。 SpotBugs 项目是active。

如果您担心可空性注释,那么我建议您使用 SpotBugs 项目从 edu.umd.cs.findbugs.annotations 命名空间提供的注释。如今,大多数 linter 或 IDE 都应该支持它。它不如 JSR 305 中提议的 javax.annotation 好,但请记住,JSR 305 从未获得批准,实际上没有带类的 jar 文件附加到 JSR 305 提议中。

关于这个的更多有趣的文章:

https://nipafx.dev/jsr-305-java-9/#modular-project https://dzone.com/articles/when-to-use-jsr-305-for-nullability-in-java

JSR 305 与 JSR 308

JSR 305 和 JSR 308 之间几乎没有任何关系。JSR 308 是关于将注释应用于泛型(java 类型参数)的能力。 JSR 308 已合并为 Java SE 8 的一部分。

唯一的链接是两个 JSR 都与两个不同的项目(FindBugs 和 Checker Framework)相关,这两个项目涉及空安全性和可空性注释主题。

从内容来看,JSR 没有任何关系。

【讨论】:

【参考方案5】:

据 Alex Millers Java 7 blog 称,JSR-308(和 305)计划进入 Java 7。也许他会出现在这里并为您提供更多信息。

【讨论】:

都没有进入 Java 7。 JSR308 将在 Java 8 中使用,但(2013 年 3 月)JSR 305 仍处于休眠状态。

以上是关于JSR 305 的状态如何?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Findbugs JSR305 会破坏 RedHat/JBoss Fuse 6.3.0 中 javax.annotations 的 OSGi 包导出?

错误:与依赖项“com.google.code.findbugs:jsr305”冲突

商城项目10_JSR303常用注解在项目中如何使用统一处理异常分组校验功能自定义校验注解

商城项目10_JSR303常用注解在项目中如何使用统一处理异常分组校验功能自定义校验注解

Spring 5 core 中的 @NonNull 是个什么鬼?!

工具使用冷知识