如何为@since 标签扫描Java 标准API 的所有javadoc?

How to scan all javadocs of the Java standard API for the @since tag?

我想制作 Java 版本到 classes 的映射,它们的方法和枚举值自这些版本以来就存在于标准 Java API 中。例如,标准 class String 自 Java 1.0 以来就存在,而 String::strip() 方法自 Java 11 以来就存在。class 和方法都有@since 标签在他们的 javadocs 中有适当的 Java 版本,这就是我想以编程方式扫描的内容。

也许还有另一种方法,与javadoc无关?例如,自 Java 9 以来,编译器支持 -release 参数,除其他事项外,该参数检查所用 API 与所选版本的 Java 版本的兼容性。在 -release 10 和带有 String::strip() 的代码的情况下,将抛出编译错误。编译器是如何做到的?它是在每次编译期间扫描 src.zip 中的 javadoc 还是使用更智能的技术?

解析 @since 可能是 error-prone 因为有一些陷阱:

如果您作为开发者只想知道添加了哪些新 API,您可以查看 "New" tab of the documentation, added in Java 17 by JDK-8265055(这是基于 @since 信息)。

javac--release 选项使用 JDK 安装中的文件 lib/ct.sym,该文件存储有关 public API 的信息之前的版本。请参阅 JEP 247 的“实施”部分。然而,这也有一些陷阱:

然而,third-party 工具允许您生成或比较 Java API 签名: