springboot3.x中Jakarta包无法引入的问题

 更新时间:2024年02月18日 09:19:03   作者:reui  
最近想将一些项目升级到springboot3.x和java17的时候,发现项目依赖中有Jakarta的包,但是代码标红提示没有相关的类,本文就来介绍一下解决方法,感兴趣的可以了解一下

最近想将一些项目升级到springboot3.x和java17的时候,发现项目依赖中有Jakarta的包,但是代码标红提示没有相关的类,特此记录一下排查问题和最终解决问题的思路方法

一、发现问题

因为之前有创建过 springboot3.x + java17 的项目,也运行正常。所以最近想着将一些旧项目也做一下update,但是不幸运的是,当改了一通代码后编译的时候,提示 "程序包jakarta.annotation不存在"。

下图看到 Resource 注解是标红提示没有找到。

之前也知道Java EE要迁移到Jakarta EE,也对整个项目的相关代码进行了修改,但是为什么还会提示有异常呢?

二、分析问题

1.依赖引入

首先考虑的肯定是对应的包是否已经引入进来,于是查看了项目的依赖

依赖里面明明是有的,为什么还是提示没有这个注解类呢?

于是 mvn clean、ide清缓存索引等等一波操作后,仍是无果....

2.发现问题点

后来看了一下项目配置,看了一下这里面的依赖,好家伙,作用域scope居然是test...

那为什么作用域会是测试阶段的呢?

3.查看依赖关系

那就看看到底是从哪里引入进来的

通过依赖分析工具,查到原来是从 spring-boot-starter-test 引入进来的,而项目中这个依赖的作用域确实是 test

那问题来了,为什么之前的项目就可以的呢?不过这个 jakarta 包不应该是从测试依赖导入进来的啊!

4.对比分析

于是对比了一下之前运行正常的项目,看看这个 jakarta 包是如何正常引入进来运行的。

好家伙,原来是从 spring-boot-starter-web 引入进来的,同时也看看其他的几个 jakarta 包。

真的不看不知道,平常真没怎么注意到这里面的依赖学问,因为自从用了 springboot 的 starter ,就真的很少关注到这些问题。

三、解决问题

要调整的这个项目里面因为是要打成jar包给其他项目使用,所以我就不想引入太多依赖包,就没有引入 starter,只是单纯的引入了 spring-web 这个包,但是这里面并没有 jakarta 依赖,而刚好项目里面又引入了一些单元测试用的依赖,所以阴差阳错就将 jakarta 以 test 作用域引入进来了...

所以,最终还是要引入 spring-boot-starter-web,不过我最后还是没妥协,只引入所需的依赖包

        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
        </dependency>

四、后续

通过查阅一些资料发现,原来 Java 17 已经不包括 jarkarta 模块...

在 Java 17 中,Jakarta EE 被移除,取而代之的是引入了 Java EE 的一部分作为扩展模块。要在 Java 17 中使用 Java EE 的功能,你需要在项目的 pom.xml 文件中添加相应的依赖

到此这篇关于springboot3.x中Jakarta包无法引入的问题的文章就介绍到这了,更多相关springboot Jakarta包无法引入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java字符串原理分析之String是否可变

    Java字符串原理分析之String是否可变

    当我们在求职时,面试官很喜欢问我们关于String的一些原理性知识,比如String的不可变性、字符串的内存分配等,为了让大家更好地应对面试,并理解String的底层设计,接下来会给大家聊聊String的一些原理,比如String为什么具有不可变性,需要的朋友可以参考下
    2023-05-05
  • java使用ajax完成上传文件

    java使用ajax完成上传文件

    这篇文章主要为大家详细介绍了java使用ajax完成上传文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 详解SpringBoot静态方法获取bean的三种方式

    详解SpringBoot静态方法获取bean的三种方式

    本文主要介绍了详解SpringBoot静态方法获取bean的三种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Java实现在线语音识别

    Java实现在线语音识别

    这篇文章主要为大家详细介绍了Java实现在线语音识别功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • javaweb实现文件上传功能

    javaweb实现文件上传功能

    这篇文章主要为大家详细介绍了javaweb实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • SpringBoot集成ENC对配置文件进行加密的流程步骤

    SpringBoot集成ENC对配置文件进行加密的流程步骤

    Spring Boot Encoder,即Spring Boot加密模块,它提供了一种简单的方式来集成安全编码功能到Spring Boot应用程序中,它是Spring Security框架的一部分,旨在帮助开发者轻松地处理数据加密,本文给大家介绍了SpringBoot集成ENC对配置文件进行加密的流程步骤
    2024-12-12
  • Mybatis中typeAliases标签和package标签使用

    Mybatis中typeAliases标签和package标签使用

    这篇文章主要介绍了Mybatis中typeAliases标签和package标签使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 在Java中实现线程安全的单例模式的常见方式

    在Java中实现线程安全的单例模式的常见方式

    单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点,在多线程环境下,确保单例模式的线程安全性是非常重要的,因为多个线程可能会同时尝试创建实例,导致实例不唯一的问题,本文介绍了在Java中实现线程安全的单例模式有几种常见的方式
    2024-09-09
  • springboot-2.3.x最新版源码阅读环境搭建(基于gradle构建)

    springboot-2.3.x最新版源码阅读环境搭建(基于gradle构建)

    这篇文章主要介绍了springboot-2.3.x最新版源码阅读环境搭建(基于gradle构建),需要的朋友可以参考下
    2020-08-08
  • java实现发送邮件功能

    java实现发送邮件功能

    这篇文章主要为大家详细介绍了java实现发送邮件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02

最新评论