概述
在升级Spring Boot到3.0版本以后,或升级Spring到6.0版本以上,会发现应用编译失败或启动失败等问题。
经过排查不难得知,Spring 6或Spring Boot 3(实际上依赖于Spring 6)不再支持javax.
开头的一系列依赖包,需要改成jakarta.
开头的一系列包。
当然编译失败或启动失败,还有其他原因,如:部分API不再是@deprecated而是直接被removed等。另外,Spring Boot 3依赖的JDK最低版本是17。
升级
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
根据maven的提示做如下升级:
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
在代码层面,import javax.*
替换为import jakarta.*
。
如果你在使用IDEA(什么?还有Javaer不用IDEA),借助于IDEA(2021.2+版本)提供的功能:
几乎可以一键完成依赖升级。
javax vs jakarta
在Java生态系统中,最初javax是一个缩写,代表Java Extension。javax作为包名,包含一系列的Java扩展(补充)包,提供各种不同的功能,如Servlet、JDBC、JMS等。这些扩展包通常是Java标准库之外的库,需要单独下载和安装,可帮助Java开发人员完成各种任务。
Jakarta EE
Jakarta EE并不是什么新技术,其前身即是Java EE,再往前就是J2EE。
Jakarta EE 9概览
Jakarta EE 9专注于迁移到新的命名空间并清除一些无谓的规范。
Jakarta EE10概览
Jakarta EE 10包括12个具有主要版本更新的组件规范和12个具有次要版本更新的组件规范。
随Jakarta EE 10发布的Core Profile 10,是 Jakarta EE Technologies 的子集,针对微服务和云开发运行时。 从MicroProfile发展而来的。
Core Profile 10中包含的Jakarta EE组件规范的关键子集:
- 注释 2.1
- 上下文和依赖注入 (CDI) Lite 4.0
- 依赖注入 2.0
- 表达语言 5.0
- 拦截器 2.0
- JSON-B 3.0
- JSON-P 2.1
- RESTful Web 服务 3.1
jakarta依赖
jakarta提供的依赖:
- jakarta.servlet-api:学习Java Web开发,绕不过Servlet。Spring Boot基于Spring,基于Spring MVC,底层很多概念都是Servlet。
- jakarta.servlet.jsp.jstl-api:
- jakarta.servlet.jsp-api
- jakarta.batch-api:提供基于XML的作业规范语言(Job Specification Language, JSL),允许以XML形式定义和执行批处理作业。
- jakarta.persistence-api:提供Java持久化API的实现,允许开发人员将Java对象映射到关系数据库中。
- jakarta.jms-api:Java消息服务应用程序接口是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
- jakarta.xml.ws-api:
- jakarta.ws.rs-api:
- jakarta.xml.bind-api:提供实体类和XML文档来回转换的API
- jakarta.json-api:用于解析、生成、转换和查询JSON文档。
- jakarta.json.bind-api:提供实体类和JSON文档来回转换的API
- jakarta.jakartaee-api:
- jakarta.mail-api:提供平台无关和协议无关的邮件收发抽象类
- jakarta.validation-api:
- jakarta.activation-api:
- jakarta.transaction-api:
- jakarta.inject-api:
- jakarta.el-api:
- jakarta.enterprise.cdi-api:
- jakarta.annotation-api:
附当前最新版Maven GAV:
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0