质量推广提醒 - JDK 23:默认注解处理政策的变化

质量推广提醒 - JDK 23:默认注解处理政策的变化

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

JDK 23改变了默认的注解处理政策,javac现在需要额外的命令行选项来启用注解处理,包括无处理、仅处理和完整处理。Oracle和OpenJDK的多个版本已支持完整处理,以帮助项目顺利迁移。

🔎

延伸解读

默认行为变更的实际影响

JDK 23 将 javac 的默认注解处理策略改为 -proc:none,这意味着如果构建脚本没有显式提供 -processor、--processor-path、--processor-module-path、-proc:only 或 -proc:full 中的任意一个,注解处理器将不会运行。对于依赖注解处理生成源代码的项目,这可能导致编译失败或生成代码缺失,需要检查构建配置并补充相应选项。

迁移准备与版本支持

为帮助项目迁移,-proc:full 选项已被向后移植到多个版本:Oracle JDK 和 OpenJDK 的 17u(17.0.11)和 11u(11.0.23),以及 Oracle 的 8u(8u411)。从 JDK 21 开始,如果 javac 在默认策略下检测到隐式使用注解处理,会打印信息提示。利用这些支持,可以提前配置构建,使其在 JDK 23 前后行为一致。

构建稳健性的提升

此前注解处理默认启用,可能导致类路径上无意放置的注解处理器被自动执行,影响构建输出的可预测性。JDK 23 要求显式启用注解处理,有助于避免这种意外行为,使构建过程更加透明和可控。项目应借此机会审查依赖和构建脚本,确保注解处理器的使用是 intentional 的。

❓

Q&A

JDK 23的默认注解处理政策有什么变化?

JDK 23要求javac使用额外的命令行选项来启用注解处理,默认情况下为 -proc:none。

JDK 23中注解处理的命令行选项有哪些?

新的 -proc 选项可以有三个值:none(无处理)、only(仅处理)和full(完整处理)。

为什么JDK 23改变了注解处理的默认设置?

为了提高构建输出的稳健性,避免意外将注解处理器放在类路径上,JDK 23要求显式启用注解处理。

如何迁移到JDK 23的 -proc:full 选项?

Oracle和OpenJDK的多个版本已支持 -proc:full,以帮助项目顺利迁移。

从JDK 21开始,javac对默认政策下的隐式注解处理有什么提示?

从JDK 21开始,如果检测到隐式使用注解处理,javac会打印信息提示。

JDK 23的默认注解处理政策对开发者有什么影响?

开发者必须提供至少一个注解处理命令行选项,否则编译将无法进行。

🏷️

标签

➡️

继续阅读