JDK21中找不到 javax.annotation.Resource 了?

五月の花 / 2024-09-19 / 原文

在 JDK 9 及以后版本,特别是到 JDK 21,javax.annotation.Resource 这样的类已经不再包含在标准的 JDK 中。原因是从 JDK 9 开始,Java 进行了模块化(Project Jigsaw),并移除了部分与 Java EE(现在称为 Jakarta EE)相关的包,例如 javax.annotation

为什么会找不到 javax.annotation.Resource

Java 的模块化系统将很多与企业应用相关的 API 移出了 JDK 的标准库。这些类和包原来是属于 Java EE 的一部分,随着 Java 9 的模块化改革和 Java EE 的转移,这些类被分离了出来,转移到 Jakarta EE 项目下,由 Eclipse Foundation 维护。

javax.annotation 包是 Java EE 的一部分,并且已经从 JDK 中移除,迁移到了 Jakarta EE 的命名空间中,使用的包名变成了 jakarta.annotation

解决方案

  1. 使用 Jakarta EE 中的 jakarta.annotation

    • 如果你正在开发企业级应用,推荐使用 Jakarta EE 提供的依赖。可以将 javax.annotation 替换为 jakarta.annotation,新版本的类名为 jakarta.annotation.Resource

    Maven 依赖示例

    <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>2.0.0</version>
    </dependency>
    
  2. 使用 Java EE 依赖

    • 如果你希望继续使用 javax.annotation,可以手动添加 Java EE 相关的库,来引入你需要的类。比如,使用以下 Maven 依赖:

    Maven 依赖示例

    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.2</version>
    </dependency>
    
  3. 引入第三方库

    • 有些第三方库也提供了对 javax.annotation 类的支持。可以查找是否有包含 javax.annotation 包的库,并将其引入你的项目。

总结

在 JDK 21 中,javax.annotation.Resource 已经不再内置。如果你需要继续使用这个类,可以通过引入 Jakarta EE 的 jakarta.annotation 包或 Java EE 的 javax.annotation API 来解决。推荐迁移到 Jakarta EE 的新命名空间,以确保兼容未来的技术发展。