概述
在升级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</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.batch</groupId>
<artifactId>jakarta.batch-api</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>jakarta.jms</groupId>
<artifactId>jakarta.jms-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>jakarta.json.bind</groupId>
<artifactId>jakarta.json.bind-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>10.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.mail</groupId>
<artifactId>jakarta.mail-api</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>jakarta.inject</groupId>
<artifactId>jakarta.inject-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>jakarta.el</groupId>
<artifactId>jakarta.el-api</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency>
拓展
jakarta项目
jakarta项目所包括的相关工具、库以及框架等罗列如下:
- BCEL:处理Java字节码的类库
- BSF:脚本程序框架
- Cactus:服务器端Java类测试工具框架
- ECS:The Element Construction Set is a Java API for generating elements for various markup anguages
- HttpComponents:The Hyper-Text Transfer Protocol.
- JCS:a distributed caching system written in java.
- JMeter:压力测试工具
- ORO:Java classes that provide Perl5 compatible regular expressions.
- Regexp:纯Java正则表达式包
- Slide:a content repository primarily using WebDAV.
- Taglibs:Repository for JSP custom tag libraries
单独项目
最开始,所有关于Java的项目,都集中在Apache的Jakarta项目之下,作为子项目存在,这时的Tomcat称为Jakarta Tomcat。后来,Jakarta下面项目太多,就开始分家,如Ant、Tomcat等,故而现在称Apache Tomcat。
以前隶属于雅加达项目,但现在作为Aapche软件基金的单独项目:
- Ant:在Maven出现之前特别流行的构建工具
- Commons:一组使用类的合集,主要作为Java标准库的补充
- HiveMind:a services and configuration microkernel
- Maven:a project build and management tool
- POI:a pure Java port of Microsoft’s popular file formats.
- Struts:很多大龄程序员肯定对这个很熟悉,一个Web应用开发框架。大概十多年前,非常流行的Web开发框架SSH=Struts+Spring+Hibernate。后来流行的SSM=Spring-MVC+Spring+MyBatis。
Tapestry:A component object model based on JavaBeans properties and strong specifications - Tomcat:服务器,提供JSP/Servlet相关容器类
- Turbine:a rapid development web application framework
- Velocity:a template engine
参考
- 什么是Jakarta EE